2009-02-11 5 views
68

Я уверен, что это довольно легко, но мне было трудно с этим справиться. У меня есть настраиваемое действие, которое выполняет установку (не-msi) при установке. К сожалению, я заметил, что он также выполняет установку на UNinstallation!Как выполнить пользовательские действия только при установке (не удалять)

Я просмотрел варианты, но я не могу понять, как это остановить. Если бы кто-нибудь мог мне помочь, я был бы невероятно благодарен.

Кроме того, как настроить настраиваемое действие для удаления только во время UNinstall? Любая помощь очень ценится парням!

+4

Для справки: [** Общих условий MSI шпаргалки **] (HTTP: // блог. flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html). –

ответ

154

Добавить условие на действие, поэтому оно запускается только во время установки, а не удаления.

Действие запустить только при установке

NOT Installed AND NOT PATCH 

Действие проходит во время установки и ремонта

NOT REMOVE 

работать только начальной установки:

NOT Installed 

Run При первоначальной установке или когда ремонт выбран.

NOT Installed OR MaintenanceMode="Modify" 

Чтобы только запустить действие во время удаления используйте следующее условие:

REMOVE~="ALL" 

лишь запустить действие во время обновления:

Installed AND NOT REMOVE 
+0

и для режима переустановки? –

+1

@Rasa Что вы подразумеваете под режимом переустановки? В MSI нет такой вещи, вы, вероятно, ищете «Repair» (NOT REMOVE). Если вы регистрируете выход MSI, вы можете точно определить, какие значения, используемые в вышеуказанных условиях, будут установлены, и выяснить, какая из них будет соответствовать вашей ситуации. – saschabeaumont

+1

Как насчет Modify? Выполнение действия только при удалении функции? Выполнение действия только при установке функции? Выполнение действия только при восстановлении функции? –

0

Условие на пользовательских действий, возможно, с соответствующее пользовательское действие для удаления. Не знаете, какие инструменты вы используете, но если вторичная установка привязана к компоненту, я бы использовал это состояние компонента. Состояние = 3 означает целевое состояние установленного. Состояние = 2 означает конечное состояние отсутствует. Обратите внимание, что состояние не будет установлено, если изменений нет.

7

Немного коррекции:

Наконец, только запустить действие во время удаления используйте следующее условие: REMOVE="ALL"

Это кажется более подходящим, поскольку свойство REMOVE содержит фичи инсталлированных.
Так что, если я делаю модификацию для удаления одной функции, REMOVE является истинным, и действие, которое должно было выполняться только при удалении, выполняется при изменении.
More details here on MSDN

+1

Спасибо, это было полезно! – M3NTA7

6

Пример:

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

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

Обратите внимание! Состояния добавляется в <Custom> тег и не<CustomAction> это смущало меня, потому что заказ следует действия Attribué