Как выполнить пользовательское действие только при установке (не удалять)

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

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

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

5 ответов

Решение

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

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

NOT Installed AND NOT PATCH

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

NOT REMOVE

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

NOT Installed

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

NOT Installed OR MaintenanceMode="Modify"

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

REMOVE~="ALL"

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

Installed AND NOT REMOVE

Немного исправления:

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

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

Пример:

<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 следует действие attribue

Пожалуйста, будьте осторожны с 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

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

Другие вопросы по тегам