У меня возникла сложная проблема, пытающаяся выполнить следующее: мое приложение устанавливает службу (watchdog.exe) и exe-файл (app.exe).Убейте мое приложение во время удаления
После завершения установки начинается сервис и создается процесс «app.exe».
во время удаления Я хочу убить процесс «app.exe» (который работает под локальной системной учетной записью, поэтому я должен работать как admin).
проблема 1: Установки говорят о необходимости перезагрузки, так как он видит, что файл «app.exe» удерживается (работает) во время фазы CostFinalize (пожалуйста, исправьте меня, если я ошибаюсь в фазе, которая проверяет если потребуется перезагрузка). Было бы намного лучше убить процесс, когда начнется деинсталляция. Я проверил, что если процесс не выполняется во время удаления, тогда установка не жалуется на необходимость перезагрузки.
проблема 2: использование пользовательского действия для уничтожения процесса является проблематичным. действие должно выполняться с повышением, но, с другой стороны, оно должно выполняться до параметра costFinalize (в противном случае оно возвращается к проблеме 1).
Буду признателен за любые предложения. Кроме того, любые альтернативные решения (есть ли другой способ закрыть процесс, возможно, во время установки, которая не потребует перезагрузки?)
Код пользовательского действия, который у меня есть (не очень хорошо, поскольку он и без необходимости запрашивает перезагрузку, убить процесс из-за отсутствия разрешений):
<InstallExecuteSequence>
<!--<ScheduleReboot After="InstallFinalize" />-->
<Custom Action="MyProcess.TaskKill" Before="InstallValidate"></Custom>
</InstallExecuteSequence>
<!--<Property Id="Net">Net.exe</Property>-->
<Property Id="QtExecCmdLine" Value='"[%SYSTEMROOT]\System32\taskkill.exe" /F /IM App.exe' />
<CustomAction Id="MyProcess.TaskKill"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="immediate"
Return="ignore" />
Вот журнал для отказа:
CAQuietExec: Ошибка 0x80070001: Командная строка возвращается сообщение об ошибке. CAQuietExec: Ошибка 0x80070001: Ошибка CAQuietExec CustomAction MyProcess.TaskKill возвратил действительный код ошибки 1603 (обратите внимание, что это не может быть на 100% точным, если перевод произошел внутри песочницы) Действие завершено 18:15:54: MyProcess.TaskKill. Возвращаемое значение 1603.
Из-за соображений безопасности я предпочитаю убивать приложение «как будто мне все равно». Запуск установщика в качестве администратора с самого начала разрешил бы мою проблему, но до сих пор 2-е решение не сработало для меня - wix начался нормально и запросил возвышение только во время установки (после того, как он не смог убить процесс и дал мне знать об этом требуется перезагрузка). Я попробую поиграть с решением № 2 еще раз, чтобы посмотреть, смогу ли я заставить его работать. – OSH
Ну, это уже небезопасно, чтобы другие приложения могли убить ваше приложение. Представьте, что ваше программное обеспечение что-то делает, и его убивают по уважительной причине. Это требует неприятностей. –