Как выполнить пользовательское действие только при установке (не удалять) - PullRequest
72 голосов
/ 11 февраля 2009

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

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

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

Ответы [ 5 ]

163 голосов
/ 12 февраля 2009

Добавьте условие к действию, чтобы оно срабатывало только во время установки, а не удаления.

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

NOT Installed AND NOT PATCH

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

NOT REMOVE

Запускать только при начальной установке:

NOT Installed

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

NOT Installed OR MaintenanceMode="Modify"

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

REMOVE~="ALL"

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

Installed AND NOT REMOVE
7 голосов
/ 06 апреля 2011

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

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

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

6 голосов
/ 24 февраля 2014

Пример:

<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>. Это сбило меня с толку, потому что за Custom следует действие атрибута

5 голосов
/ 02 января 2014

Пожалуйста, будьте осторожны с REMOVE=ALL. Он недоступен до последовательности установки.
И проверьте ссылки ниже для более подробной информации:
http://msdn.microsoft.com/en-us/library/aa371194(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa368013(v=vs.85).aspx

1 голос
/ 12 февраля 2009

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

...