Wix로 만든 MSI에서 Uninstall을 실행할 때 파일을 삭제하기 전에 백그라운드에서 실행중인 프로세스를 강제 종료해야합니다. 메인 어플리케이션은 bg-process 모니터링 로컬 윈도우 서비스의 상태를 반영하는 트레이시콘으로 구성되어 있습니다 (C#으로 작성되었지만 이것은 더 이상 관련이 없습니다). Wix : 강제로 프로세스/작업을 죽이는 방법은 무엇입니까?
내가 먼저 다음 시도 :<File Id='FooEXE' Name='Foo.exe' Source='..\Source\bin\Release\Foo.exe' Vital='yes' />
...
<InstallExecuteSequence>
<Custom Action="CloseTray" Before="InstallValidate" />
</InstallExecuteSequence>
...
<CustomAction Id="CloseTray" ExeCommand="-exit" FileKey="FooEXE" Execute="immediate" Return="asyncWait" />
트레이 아이콘이 즉시 응용 프로그램 닫기 대화 상자를 확인한 후 폐쇄,하지만 제거가 완료된 후에서 foo.exe 작업은 여전히 taskmgr을에 나타납니다. 또한, 다음과 같은 에러 메시지가 주어졌다 :
한게 이유는 다음 I이 시도 : 동일한 결과를 얻은 후
<InstallExecuteSequence>
<Custom Action="Foo.TaskKill" Before="InstallValidate" />
</InstallExecuteSequence>
...
<CustomAction Id="Foo.TaskKill" Impersonate="yes" Return="asyncWait" Directory="WinDir" ExeCommand="\System32\taskkill.exe /F /IM Foo.exe /T" />
을 시도 :
<Property Id="QtExecCmdLine" Value='"[WinDir]\System32\taskkill.exe" /F /IM Foo.exe'/>
...
<InstallExecuteSequence>
<Custom Action="MyProcess.TaskKill" Before="InstallValidate" />
</InstallExecuteSequence>
...
<CustomAction Id="MyProcess.TaskKill" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="ignore"/>
샘플 된 나는 여기에서 가져 갔다 : How to kill a process from WiX
나는이 명예의 동상을 구축 생각하고 있어요 :
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
...
<InstallExecuteSequence>
<Custom Action="WixCloseApplications" Before="InstallValidate" />
</InstallExecuteSequence>
...
<util:CloseApplication Id="CloseFoo" CloseMessage="yes" Description="Foo is still running!" ElevatedCloseMessage="yes" RebootPrompt="yes" Target="Foo.exe" />
이 하나가 나에게 다른 오류를 준 모든 다른 실패 최근에 때, 나는 또한 어떤 성공없이 시도 그냥 죽기를 거절하는 과정! ... 그 중 하나 또는 응용 프로그램 측면에서 문제가 있다고 생각 어디 Application.Exit(); 또는 Environment.Exit (0); Program.cs 내부의 일부 줄.
윅스 또는 내 응용 프로그램 중 하나를 제거 할 때 성공적으로 닫을 수있는 다른 방법이 있습니까? 감사합니다.
글쎄, 그건 두 번째 문제를 해결 :) 감사합니다! 이제는 이들 중 어느 것도 작업을 죽이지 않고 살아남은 채로 남아 있지 않은지 알아야합니다. (여전히 taskmgr에 Foo.exe가 표시되고 첫 번째 오류 메시지가 표시됩니다.) – safejrz
당신이 설치하고있는 앱을 실행하는 사용자는 누구입니까? 그렇지 않은 경우 시스템 계정이 프로세스를 종료하도록 지연된 동작으로 실행해야합니다. –