2009-06-22 14 views
5

Tôi có một ứng dụng Windows Forms có trình cài đặt (.msi) đã được tạo bằng Visual Studio. Tôi hiện đang tạo trình cài đặt mới cho phiên bản 2.0 với thuộc tính RemovePreviousVersions được đặt thành true.Chúng tôi có thể hướng dẫn Thiết lập Visual Studio để giữ các tệp hiện có để cài đặt lại không?

Bây giờ, khi tôi cài đặt 2.0 trên 1.0, nó sẽ xóa 1.0 và cài đặt 2.0 hoàn toàn.

Có cách nào để tôi có thể nói trình cài đặt nếu bạn tìm thấy một số tệp đã được cài đặt (như tệp .xml được sử dụng cho dữ liệu) thì không ghi đè chúng?

Tôi cố gắng để có cài đặt 2.0 tôi phục vụ cho 2 mục đích:

  • Cài đặt từ đầu cho người dùng mới
  • người dùng hiện tại sẽ nâng cấp nhưng không bị mất các tùy chỉnh của họ

Trả lời

2

Khi tôi còn trong một tình huống tương tự những gì tôi đã làm là:

Các tệp đã được tùy chỉnh bởi mỗi người dùng và KHÔNG được chạm vào bởi trình cài đặt KHÔNG được bao gồm trong phần e MSI (KHÔNG trong Dự án Thiết lập Visual Studio). Khi ứng dụng được chạy lần đầu tiên tôi tạo các tệp XML thông qua mã.

Các tệp tĩnh (ví dụ: dữ liệu được sử dụng để điền danh sách thả xuống) Tôi đã đưa vào MSI và tôi có thể cập nhật chúng bằng cách tạo một MSI mới với Visual Studio.

Về cơ bản không bao gồm các tệp có thể tùy chỉnh trong dự án MSI của bạn. Tạo chúng trong mã cho người dùng mới.

Tôi chưa bao giờ xem xét việc yêu cầu MSI không cập nhật một số tệp nhất định có trong tệp MSI. Giải pháp tôi đưa ra là hoàn hảo cho tôi. Tôi không biết nếu nó có thể được thực hiện.

Tôi hy vọng điều này sẽ hữu ích.

13

Dự án triển khai trong VS không ghi đè lên tệp. Điều gì xảy ra là vì bạn có RemovePreviousVersions được đặt thành true, khi bạn thay đổi phiên bản tệp chương trình và GUID ProductCode của dự án thiết lập, trước tiên nó sẽ gỡ cài đặt phiên bản trước và sau đó sẽ cài đặt phiên bản mới.

Để đảm bảo một số tệp không bị ghi đè, tôi thường loại trừ chúng khỏi tệp đầu ra Nội dung hoặc Chính (bất kỳ vị trí nào) và sau đó thêm chúng riêng biệt vào dự án thiết lập. Làm như vậy, bạn có thể thiết lập riêng các thuộc tính cho các tệp đó. Thuộc tính bạn đang tìm kiếm được gọi là Thường trực "nếu được đặt thành true sẽ không bao giờ gỡ cài đặt tệp được đề cập và do đó sẽ không bao giờ ghi đè tệp đó bằng phiên bản mới. Hạn chế duy nhất với điều này là khi bạn gỡ cài đặt sản phẩm, tệp Vĩnh viễn sẽ không bị xóa khỏi vị trí mục tiêu của họ, nhưng trong trường hợp của tôi (thường là file DB địa phương), đó là một điều tốt;!.)

Cheers

[sửa] trên đây là đúng đối với VS 2008 SP1 Haven' t đã thử nó trên các phiên bản khác, vì vậy hy vọng bạn đang sử dụng cùng một phiên bản VS hoặc nó hoạt động cho phiên bản bạn sử dụng

[edit2] Oh, bạn cũng có thể sử dụng thuộc tính "Điều kiện" để đạt được điều gì đó ar. Nếu bạn làm điều đó, hãy chắc chắn rằng "Transitive" được đặt thành True để Điều kiện luôn được đánh giá. Chưa thử với Điều kiện, nhưng đó là một tùy chọn khác mà bạn có thể xem. Khác với 2, tôi nghĩ rằng đó là khá nhiều cho các dự án triển khai VS.

+0

Tuyệt vời, cảm ơn bạn! Điều này sẽ được đánh dấu là câu trả lời. –

+1

Quy tắc thay thế tệp là [tại đây] (http://msdn.microsoft.com/en-us/library/aa370531(v=VS.85).aspx). – CyberMonk

+0

Sử dụng VS2010 SP1. Nó không hoạt động đối với tôi ... Tập tin được thay thế ngay cả khi Permanet được đặt thành true !!! Nó được thay thế khi ngày/giờ của tệp trên đĩa cũ hơn ngày tạo gói. Trong VS2010 không phải SP1, nó đã được thay thế khi ngày của tệp trên đĩa cũ hơn thời gian ngày của tệp được sử dụng để tạo gói. Cài đặt ngày giờ của tập tin nguồn thành 01/01/2001 đã giải quyết cho tôi rất nhiều rắc rối, nhưng nó không hoạt động nữa !!! –