У меня есть служба MyService.exe, которая присматривает за моим приложением MyApp.exe, что означает, что оно запускает приложение, когда происходит сбой этого приложения или что-то еще. В основном, когда служба останавливается, приложение останавливается (службой), а когда служба запускается, приложение запускается службой.
Для того, чтобы остановить мой сервис и тем самым мое приложение при удалении я делаю:
<ServiceControl Id='MyServiceControl' Name='MyServiceForTest' Start='install' Stop='uninstall' Remove='uninstall'/>
Но когда я хочу удалить все, я получаю сообщение об ошибке: «Программа установки должна обновить файлы или службы, которые не могут быть обновлены во время работы системы. Если вы решите продолжить, для завершения установки потребуется перезагрузка. ». Если я вручную остановлю службу перед запуском деинсталлятора, я не получу это сообщение, так как и моя служба, и мое приложение больше не будут работать.
В файле журнала я заметил, что это происходит в InstallValidate, и я получаю это сообщение b / c о работе MyApp.exe.
Я думаю, что происходит: деинсталляторы проверяют запущенные приложения, он замечает, что MyService.exe и MyApp.exe оба работают, обнаруживает, вероятно, что MyService.exe будет остановлен самим деинсталлятором в соответствии с инструкциями, но не Не знаю о MyApp.exe, что этот файл также будет прерван, как только служба будет остановлена, поэтому он покажет сообщение о перезагрузке.
Я не могу просто закрыть MyApp.exe из деинсталлятора, т.к. служба перезапустит его снова.
Как я мог решить эту проблему, чтобы пользователю не нужно было перезагружаться или вручную останавливать службу перед выполнением удаления / обновления? Кроме того, я больше не могу изменять код MyService и MyApp, поэтому мне придется делать это только из (не) установщика.
ТИА,
Viv