2010-06-24 2 views
3

У меня есть программа установки с WiX. Когда он будет завершен, он запускает приложение, которое вводит некоторый код в процессе проводника.WiX uninstall - закрыть приложение перед перезагрузкой

В настоящее время, когда я удаляю, перезагружается менеджер и предлагает закрыть приложение и проводник. Вместо этого я хочу закрыть приложение вручную (это выполняется путем повторного запуска его с помощью -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. Таким образом, программа Restart Manager появляется и просит закрыть мое приложение и Explorer. Действие выполняется позже, но к тому времени приложение уже исчезло.

Итак, я попытался это:

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

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

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

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

Любые идеи?

ответ

5

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