2010-07-20 19 views
10

Tôi có một chương trình cài đặt bằng trình cài đặt WiX.Trình cài đặt WiX xóa tệp khi gỡ cài đặt nhưng không được nâng cấp

Bản thân chương trình tạo một số tệp trong thư mục [CommonAppDataFolder] \ [MyAppName] \. Những tập tin này đều có cùng phần mở rộng (cho phép gọi nó là .dat).

Mở nâng cấp, tôi muốn giữ lại những tệp này.
Mở gỡ cài đặt, tôi muốn xóa những tệp này.

Tôi hiện đang xóa các tập tin như vậy:

<Directory Id='CommonAppDataFolder'> 
    <Directory Id='MyCommonAppDataFolder' Name='MyAppName'> 
    <Component Id='RemoveFilesComponent' Guid='71cb0cd8-8459-4a8f-89b7-f00977aa7b70'> 
     <RemoveFile Id='RemoveFiles' Name='*.dat' On='uninstall'/> 
    </Component> 
    </Directory> 
</Directory> 

Và tôi có điều này để tạo điều kiện nâng cấp:

<InstallExecuteSequence> 
    <RemoveExistingProducts After='InstallInitialize'/> 
</InstallExecuteSequence> 

Bây giờ, khi tôi gỡ bỏ cài đặt, các file .dat được loại bỏ một cách chính xác.
Tuy nhiên, khi tôi nâng cấp, các tệp .dat cũng bị xóa. Tôi đoán vì nâng cấp đang thực hiện gỡ cài đặt trên phiên bản trước.

Tôi có đang tiếp cận vấn đề này chính xác không? Làm cách nào để giữ lại các tệp khi nâng cấp, trong khi xóa chúng khi gỡ cài đặt?

+0

Bạn đã bao giờ tìm ra giải pháp cho vấn đề này chưa. – darbid

+0

Thời gian dài trước đây, nhưng không phải là tôi có thể nhớ. Tôi nghĩ rằng tôi đã kết thúc chỉ để lại các tập tin trong CommonAppDataFolder sau khi gỡ bỏ cài đặt. – MatthewKing

+0

Cảm ơn Matt đã trả lời. – darbid

Trả lời

1

Một tùy chọn sẽ là chuyển sang cập nhật nhỏ. Điều đó có rất nhiều hạn chế vì vậy nó không phải là dễ dàng như nó âm thanh.

+1

Câu trả lời của bạn có thể là trước hoặc trong giai đoạn đầu của quá trình đốt cháy do đó tôi tự hỏi liệu bạn có thể trả lời câu hỏi này một cách khác nhau hay không. Là một giải pháp có thể để tạo ra một bootstrapper wix với 2 gói msi. Các tệp .dat của anh ta sẽ nằm trong gói msi thứ hai và không được nâng cấp. – darbid

+0

Rất nhiều thứ có thể được thực hiện nếu gói ban đầu được vận chuyển khác nhau. Tôi trả lời giả định anh ta cần phải đối phó với những gì được vận chuyển. –

+0

@RobMensching có câu trả lời cho các gói hàng không được giao không? (hiện đang phát triển) Nó sẽ rất hữu ích. Cảm ơn! – Eli

2

Bạn đã thử thêm điều kiện vào RemoveExistingProducts chưa? Đây là những gì tôi sẽ làm.

<RemoveExistingProducts After='InstallInitialize'>(NOT UPGRADINGPRODUCTCODE) AND (Installed)</RemoveExistingProducts> 
+1

Điều này có vẻ như những gì tôi muốn, nhưng tất nhiên điều đó có nghĩa là phiên bản trước đó không bị xóa khi nâng cấp. Ví dụ, tôi kết thúc với nhiều mục cho ứng dụng của tôi trong bảng điều khiển 'Thêm hoặc Loại bỏ Chương trình'. Có cách giải quyết nào không? – MatthewKing

+1

Bạn có thể thử xóa sản phẩm hiện có thành After InstallFinalize. Điều này sẽ loại bỏ bất kỳ tập tin thay đổi và cài đặt đăng ký nhưng giữ những gì bạn đã không. CNTT cũng có thể phải làm với bạn ProductID hoặc phiên bản. Hệ điều hành có thể nghĩ rằng đó là một chương trình hoàn toàn khác. –