2009-11-13 5 views
6

WiX 설치 프로그램을 만들 때 업그레이드를 설치하기 전에 응용 프로그램을 닫으려고 할 때 문제가 발생했습니다. 다음은이 작업을 수행하는 방법의 예입니다. 응용 프로그램이 다음 닫기를 끝낼 않고 설치가 그 시점에서 정체 도착이 예제를 사용WiX를 사용하여 응용 프로그램 닫기

<util:CloseApplication Id="CloseServe" CloseMessage="yes" Target="server.exe" ElevatedCloseMessage="yes" RebootPrompt="no"/> 
<InstallExecuteSequence>  
    <Custom Action="WixCloseApplications" After="RemoveExistingProducts" /> 
    <RemoveExistingProducts After="InstallInitialize"/> 
    <Custom Action='LaunchApplication' After='InstallFinalize'/> 
    <!--<Custom Action='StopServer' Before='RemoveExistingProducts'/>--> 
</InstallExecuteSequence> 

롤백을 수행합니다. 이것은 exe가 닫히기 전에 제거 된 사실 때문일 수 있습니까? WixCloseApplications 후에 RemoveExistingProducts가 수행되도록 시퀀스를 변경하려고 시도했지만 오류 코드 2613이 표시됩니다.

+2

마지막으로 오류가 무엇인지 설명하면 좋을 것입니다. 허용 된 대답은 설치 로그를 생성 할 것을 제안합니다. –

+0

솔직히 전체 문제를 기억할 수 없을 정도로 오래되었습니다. 로깅은 내가 그것을 추적하는 것을 도왔다. 기존 제품을 제거하기 전에 이런 방식으로 프로그램을 닫을 수는 없었지만 기존 제품이 실행 중이면 제거 할 수없는 시퀀스 문제였습니다. 부트 스트 래퍼가 그 문제를 도와주었습니다. –

답변

7

설치를 로깅하고 거기에서 무엇을 추적 할 수 있는지보십시오. 과 같이 명령 콘솔에서 설치 프로그램을 실행 해보십시오 :

msiexec.exe /i [msi filename] /log [filepath\logfilename.log] 
0

나는 당신이 InstallExecuteSequence에서에 가능한 한 빨리 실행중인 응용 프로그램을 종료 할 필요가 있다고 가정하고 Windows Installer를 시작 확실히 전에 InstallInitialize 것 시스템을 변경하는 트랜잭션.

또한 당신은 응용 프로그램이 동안 설치 메뉴를 통해 당신주기가 대화 형으로 폐쇄되도록 같은 뿐만 아니라 에서 InstallUISequence 작업을 ApplicationClose 실행해야합니다. 자동으로 설치할 때 전체 InstallUISequence를 건너 뛰므로 InstallExecuteSequence에서도 필요합니다.

accidentially msiexec.exe를가 오류로 해석하는 종료 코드/오류 코드를 반환하여 롤백 사용자 지정 작업에을 트리거 할 수 있음을 유의하십시오. 사용자 지정 작업의 완료가 중요하지 않은 경우 설치를 계속할 수 있도록 오류 검사를 해제합니다. 이 경우 재부팅이 필요할뿐입니다. 당신이 닫거나 종료하려고하는 것은 서비스 경우

은, MSI는 내장 한 ServiceControlServiceInstall 요소 (and others)를 통해이 처리하는 기능.

관련 문제