WiX закрыть приложение перед удалением - закрыть сообщение открыть приложения - PullRequest
9 голосов
/ 22 марта 2012

Я в каком-то страдании.У меня есть установщик, устанавливающий и запускающий приложение иконки в трее (common .exe)

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

Я применил это пользовательское действие, чтобы закрыть приложение перед удалением (или даже во время)

<CustomAction Id="CloseTrayApp" ExeCommand="-exit" FileKey="TrayApp" Execute="immediate" Return="asyncNoWait" />

<InstallExecuteSequence>
    <Custom Action="CloseTrayApp" Before="InstallValidate" />
</InstallExecuteSequence>

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

Я уже пытался использовать CloseAction, но спешил использовать его из-за ошибки при компиляции.В нем говорится, что пространство имен WixUtils может отсутствовать, но я дважды проверил его наличие:

xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"

Как можно избежать всплывающего диалогового окна и вызвать выполнение этого настраиваемого действия?

1 Ответ

7 голосов
/ 22 марта 2012

Вы также должны добавить ссылку на WixUtilExtension.dll. Если вы используете Visual Studio / Votive, просто щелкните правой кнопкой мыши ссылку «Добавить ссылку» и выберите библиотеку DLL из установщика Windows [ProgramFilesFolder] XML v3.5 \ bin. В противном случае вы должны сделать расширение доступным для компилятора и компоновщика:

candle.exe yourfile.wxs -ext %full path to WixUtilExtension.dll%'
light.exe yourfile.wixobj -ext %full path to WixUtilExtension.dll% –out yourfile.msi yourfile.wixout'

Более подробную информацию можно найти по адресу:

Использование стандартных пользовательских действий

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

...