WiX uninstall - закрыть приложение перед перезагрузкой менеджера - PullRequest
3 голосов
/ 24 июня 2010

У меня есть установщик с WiX. После завершения установки запускается приложение, которое внедряет некоторый код в процесс проводника.

В настоящее время, когда я удаляю, запускается менеджер перезапуска и предлагает закрыть мое приложение и Проводник. Вместо этого я хочу закрыть свое приложение вручную (это можно сделать, запустив его снова с -exit в командной строке). У меня есть пользовательское действие, которое делает это.

Вот что я попробовал до сих пор:

<CustomAction ExeCommand="-exit" FileKey="MyApp.exe" Id="CloseMyApp" Impersonate="yes" Return="ignore" />

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
    <Custom Action="CloseMyApp" Before="RemoveFiles" />
</InstallExecuteSequence>

Это не работает. Действие выполняется после сеанса Restart Manager. Поэтому менеджер перезапуска всплывает и просит закрыть мое приложение и Проводник. Действие запускается позже, но к тому времени приложение уже исчезло.

Итак, я попробовал это:

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
    <Custom Action="CloseMyApp" Before="RemoveExistingProducts" />
</InstallExecuteSequence>

Это тоже не работает. Действие сделано еще слишком поздно. Я также получаю «предупреждение LGHT1076: ICE63: некоторые действия находятся между InstallInitialize и RemoveExistingProducts.».

Так в основном - как мне выполнить свое настраиваемое действие во время удаления и перед сеансом Restart Manager?

Я предполагаю, что если я использую Impersonate = "no", он может запуститься в нужное время, но это не вариант. Это связано с тем, что новый процесс должен выполняться для того же пользователя, что и процесс, который должен быть закрыт, поскольку он ищет свое окно и отправляет сообщения. Это гораздо сложнее, если процессы принадлежат разным пользователям.

Есть идеи?

1 Ответ

5 голосов
/ 11 июля 2010

Вам потребуется пользовательское действие CloseMyApp для запуска до InstallValidate, поскольку именно тогда обрабатывается менеджер перезапуска ( doc ). В качестве альтернативы вы можете отключить менеджер перезапуска с помощью свойств MSIDISABLERMRESTART или MSIRESTARTMANAGERCONTROL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...