Как убить процесс при удалении с помощью WiX - PullRequest
1 голос
/ 21 мая 2019

Я использую Wix для создания установочного файла .msi. когда я удаляю свое приложение, оно как-то все еще работает, и я вижу его в диспетчере задач.

Я пробовал Отложенное выполнение для настраиваемого действия, как описано в документации Wix: https://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html но, к сожалению, это не работает со мной. команда, которую я хочу выполнить: "taskkill / f / im myProcess.exe"

<Property Id="myProcessKill" Value="taskkill /f /im myProcess.exe"/>
<CustomAction Id="myProcessKill" BinaryKey="WixCA" DllEntry="WixQuietExec"
            Execute="deferred" Return="check" Impersonate="no"/>

<InstallExecuteSequence>
  <Custom Action="myProcessKill" After="InstallValidate"/>
</InstallExecuteSequence>

из-за этого мой msi-файл выдает ошибку во время установки. и если я изменил Return = "check" на Return = "ignore", msi завершает установку, но не удаляет мой процесс при удалении. что не так с кодом выше? или есть какой-то другой способ убить мой процесс при деинсталляции? Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Возможно, попробуйте: Элемент CloseApplication WiX .Я хотел бы попробовать это, прежде чем пытаться что-либо еще, чтобы избежать зависимости от любых двоичных файлов. Найден этот образец на github.com (не проверено).

1 голос
/ 21 мая 2019

Попробуйте использовать cmd.exe с кавычками и передайте taskkill к этому, в вашем случае

<Property Id="myProcessKill" Value="&quot;c:\windows\system32\cmd.exe&quot; /c taskkill /f /im myProcess.exe"/>

Я также не уверен в ваших пользовательских действиях последовательно, по крайней мере, вы должны добавить REMOVE="ALL".В нашем приложении мы используем <Custom Action="CloseApplication" Before="InstallInitialize"> <![CDATA[ NOT UPGRADINGPRODUCTCODE AND REMOVE="ALL" ]]> </Custom>

...