Как выполнить Пользовательское действие перед RemoveExistingProducts с After= "InstallValidate" в WiX
у меня что-то вроде этого:
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate"/>
</InstallExecuteSequence>
Так как одна из деинсталляции не удается, мне нужно выполнить Пользовательское действие, чтобы решить проблему перед RemoveExistingProducts. Что-то в строчках:
<CustomAction Id="FixStuff" .. />
<InstallExecuteSequence>
<Custom Action="FixStuff" Before="RemoveExistingProducts" />
<RemoveExistingProducts After="InstallValidate"/>
</InstallExecuteSequence>
это, конечно, не работает, так как пользовательское действие не может быть перед InstallInitialize. Я бы очень хотел удалить существующие продукты между InstallValidate и InstallInitialize, но я хотел бы выполнить FixStuff перед удалением существующих товары.
возможно ли это сделать?
1 ответов
к сожалению, вы не можете запустить повышенное пользовательское действие перед RemoveExistingProducts с текущей конфигурацией.
некоторые возможные подходы:
переместить RemoveExistingProducts прямо перед InstallFinalize. Это решает проблему пользовательских действий, но могут возникнуть и другие проблемы, так как этот подход имеет много ограничений (компоненты должны поддерживать свои имена и GUID между версиями, пользовательские действия должны знать, что обновление выполняется в конце установки и т. д.).
создайте загрузчик EXE, который исправляет старый установщик перед запуском нового MSI. Этот bootrapper могут потребоваться права администратора через манифест:
http://msdn.microsoft.com/en-us/library/bb756929.aspx
-
восстановить сломанный MSI с помощью этого метода:
- исправить проблему в старом Компания MSI
- создайте загрузчик BAT или EXE, который восстанавливает его с помощью этой команды:
msiexec / fv
- распространите этот MSI в качестве обновления перед новым пакетом
когда ваш новый пакет запускает RemoveExistingProducts, старый кэшированный MSI должен быть исправлен, и он должен правильно удалить.