2009-02-11 37 views
68

Tôi chắc chắn điều này khá dễ dàng, nhưng tôi đã có một thời gian khó khăn với nó. Tôi đã có một hành động tùy chỉnh thực thi một trình cài đặt khác (không phải msi) khi cài đặt. Thật không may, tôi đã nhận thấy rằng nó cũng thực hiện trình cài đặt trên cài đặt UNinstallation!Làm thế nào để thực hiện hành động tùy chỉnh chỉ trong cài đặt (không gỡ cài đặt)

Tôi đã xem xét các tùy chọn nhưng tôi không thể tìm ra cách để ngăn chặn điều này. Nếu ai đó có thể giúp tôi, tôi sẽ vô cùng biết ơn.

Ngoài ra, làm cách nào để đặt hành động tùy chỉnh chỉ tắt trong khi cài đặt UNinstall? Bất kỳ trợ giúp được đánh giá cao guys!

+4

Đối với một tài liệu tham khảo: [** Common MSI Điều kiện Cheat Sheet **] (http: // blog. flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html). –

Trả lời

154

Thêm điều kiện vào hành động để nó chỉ được kích hoạt trong quá trình cài đặt chứ không phải gỡ cài đặt.

hành động chạy chỉ trong thời gian cài đặt

NOT Installed AND NOT PATCH 

hành động chạy trong Cài đặt và sửa chữa

NOT REMOVE 

Run trên chỉ cài đặt ban đầu:

NOT Installed 

Run trên cài đặt ban đầu hoặc khi sửa chữa đã chọn.

NOT Installed OR MaintenanceMode="Modify" 

Để chỉ chạy một hành động trong uninstall sử dụng điều kiện sau đây:

REMOVE~="ALL" 

Để chỉ chạy một hành động trong khi nâng cấp:

Installed AND NOT REMOVE 
+0

và để cài đặt lại chế độ? –

+1

@Rasa bạn có ý nghĩa gì với chế độ cài đặt lại? Không có điều như vậy trong cách nói MSI, có thể bạn đang tìm kiếm "Sửa chữa" (KHÔNG XÓA). Nếu bạn đăng nhập đầu ra MSI, bạn có thể thấy chính xác những gì các giá trị khác nhau được sử dụng trong các điều kiện trên sẽ được thiết lập và tìm ra cái nào phù hợp với tình huống của bạn. – saschabeaumont

+1

Điều gì về sửa đổi? Chỉ chạy một hành động khi một tính năng được gỡ cài đặt? Chỉ chạy một hành động khi một tính năng đang được cài đặt? Chỉ chạy một hành động khi một tính năng được Sửa chữa? –

0

Một điều kiện trên hành động tùy chỉnh, có lẽ với một hành động tùy chỉnh phù hợp để thực hiện việc gỡ cài đặt. Không chắc chắn bạn đang sử dụng công cụ nào, nhưng giả sử cài đặt phụ được gắn với một thành phần, tôi sẽ sử dụng trạng thái thành phần đó. Trạng thái = 3 có nghĩa là trạng thái đích được cài đặt. Trạng thái = 2 nghĩa là trạng thái mục tiêu vắng mặt. Lưu ý rằng trạng thái sẽ không được đặt nếu không có thay đổi.

7

Một chút điều chỉnh:

Cuối cùng, để chỉ chạy một hành động trong uninstall sử dụng điều kiện sau đây: REMOVE="ALL"

Điều này có vẻ thích hợp hơn là tài sản REMOVE chứa các tính năng được gỡ cài đặt.
Vì vậy, nếu tôi sửa đổi để xóa một đối tượng địa lý, REMOVE là đúng và hành động chỉ thực thi khi gỡ cài đặt thực thi khi sửa đổi.
More details here on MSDN

+1

Cảm ơn, điều đó rất hữu ích! – M3NTA7

6

Một ví dụ:

<InstallExecuteSequence> 
.. 
    <Custom Action="QtExecIdOfCA" Before="InstallFinalize">NOT Installed</Custom> 
.. 
</InstallExecuteSequence> 

.. 
.. 
<CustomAction Id="QtExecIdOfCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/> 

Thông báo! Điều kiện được thêm vào thẻ <Custom>không các <CustomAction> nó bối rối tôi, vì Tuỳ chỉnh được theo sau bởi Action attribue

Các vấn đề liên quan