У меня есть установщик с 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", он может запуститься в нужное время, но это не вариант. Это связано с тем, что новый процесс должен выполняться для того же пользователя, что и процесс, который должен быть закрыт, поскольку он ищет свое окно и отправляет сообщения. Это гораздо сложнее, если процессы принадлежат разным пользователям.
Есть идеи?