Как заставить WiX удалить, если в CustomAction есть ошибка - PullRequest
3 голосов
/ 12 февраля 2011

У меня есть следующий CustomAction:

<CustomAction Id="ActionName"
              After="InstallFinalize">
  <![CDATA[NOT Installed AND (VSTORUNTIME4="#1")]]>
</CustomAction>

Проблема в том, что в CustomAction есть случай, когда я возвращаю ActionResult.Failure.В этом случае установщик отобразит сообщение об ошибке и сообщит, что установка не удалась, но приложение все еще частично установлено (файлы уже находятся в Program Files, а приложение отображается в программах удаления).

Я хочу, чтобы, если я верну ActionResult.Failure, установка будет прервана и удалена.Это то, что происходит, если пользовательское действие завершается неудачно в установщике Visual Studio по умолчанию, и я думаю, что это имеет больше смысла.

Кто-нибудь знает, как вызвать удаление в случае сбоя пользовательского действия?Нужно ли добавлять что-то дополнительное в WiX XML?

Ответы [ 3 ]

7 голосов
/ 15 февраля 2011

В настоящее время настраиваемое действие запланировано после завершения транзакции установки (After = "InstallFinalize").Единственными настраиваемыми действиями, которые можно откатить, являются «отложенные» настраиваемые действия, запланированные между «InstallInitialize» и «InstallFinalize».Для отложенных настраиваемых действий также следует запланировать откат настраиваемого действия перед ним.

2 голосов
/ 12 февраля 2011

Установщик Windows по умолчанию поддерживает историю транзакций с возможностью отката всех изменений в системе. Вопрос в том, что вы делаете по своему усмотрению и где и как они запланированы?

Если ваши пользовательские действия изменяют состояние компьютера, они должны сделать это транзакционным способом, иначе установщик не сможет откатить внепроцессные изменения, вызванные вашим кодом.

Вот пара хороших статей для чтения:

Этапы установки и параметры выполнения в сценарии для настраиваемых действий в установщике Windows

Zataoca: классы пользовательских действий

Zataoca: пользовательские действия должны основываться на данных.

Zataoca: Пользовательские действия (как правило) - это признание ошибки.

0 голосов
/ 15 февраля 2011

я думаю, что вам нужно сделать, это добавить элемент «Возврат» в вашу привычку, тогда, если пользовательское действие возвращает значение не ноль, ваша установка завершится неудачно и откатится.

что вам нужно сделатьчтобы убедиться, что ваше обычное значение возвращает ненулевое значение при неудаче.

ExeCommand = "[INSTALLLOCATION] BeforeUnstall.bat" Execute = "deferred" Return = "check" HideTarget = "no" Impersonate = "no"/>

...