2010-06-04 1 views
1

Wix를 사용하여 제거하기 전에 프로세스를 닫으려고합니다. 나는 보이는 윈도우가있는 한 그것이 작동한다는 것을 확인했다. 그러나 보이지 않는 윈도우 (시스템 트레이 응용 프로그램 이래로이 응용 프로그램의 대부분의 경우) 인 경우, 제거 프로그램이 멈추고, 결국 프로세스가 실행중인 상태로 제거가 계속됩니다.Wix의 util : CloseApplication 확장이 작동하지 않는 것 같습니다.

this forum post에 따르면, Wix가 과거에 최소화 된 응용 프로그램을 닫는 데 어려움을 겪었던 것처럼 보입니다. 그래서 이것이 관련이 있는지 궁금합니다.

프로세스가 종료되도록하기 위해 내가 할 수있는 다른 방법에 대한 제안 사항이 있습니까? Win32 API를 사용하여 내 응용 프로그램에서 메시지를 캡처 할 수있는 방법이 있습니까?

다음은 CloseApplication 선언입니다 :

<util:CloseApplication Id="CloseApp" CloseMessage="yes" Target="App.exe" RebootPrompt="yes" /> 

그리고 여기에 사용자 지정 작업의 : 설치 트랜잭션 전에 WixCloseApplications 사용자 지정 작업을 예약하는 것처럼

<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom> 

답변

4

것 같습니다. 사용자 지정 작업이 작동하는 방식은 응용 프로그램을 실제로 닫는 지연된 작업을 예약했는지입니다. 거래 중에 발생하지 않는 한 그 일을 할 수 없습니다 (After="InstallInitialize").

수정 프로그램은 매우 쉽습니다. Custom/@Action="WixCloseApplications" 요소를 제거하십시오.

2

먼저, WixUtilExtension.dll 어셈블리를 참조하는 것을 잊지 마십시오. 내가 InstallInitialize 전에 실행할 당신이 당신의 사용자 지정 작업을 변경해야합니다 것으로 나타났습니다

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 

: 윅스 요소가 UtilExtension 네임 스페이스의 정의를 포함하는 경우 또한 확인하십시오.

<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom> 

당신이 작동하지 않습니다 이러한 변경 및 CloseApplications 확장을 적용하면

, 나는이 문제에 직면

msiexec /i MyApplication.msi /l*v MyLogFile.txt 
0

사용하여 설치 프로세스를 로그인합니다. Before 속성을 "InstallValidate"로 변경하면 효과가있었습니다.

<Custom Before="InstallValidate" Action="WixCloseApplications"/>