2008-10-30 8 views
4

Windows XP에서 Wise Package Studio 7.0 SP2를 사용하고 있습니다.MSI 기반의 설치 제거 중에 실행중인 프로세스를 중지하는 방법은 무엇입니까?

MSI 랩 EXE 설치를 통해 파일을 설치하고 app.exe로 참조 할 수있는 파일 중 하나를 실행하는 것이 좋습니다. 그래서에

하여 MSI 편집기의 탭 "이연 실행"나는 선 추가했다 :

If Not Installed then 
    Execute Installed Program app.exe (Action) 
End 

이 내 App.exe가이 기간 동안 설치하지에 을 실행할 것이라고 보장을 수정/수리/제거. app.exe가 실행되면 편리하게 시스템 트레이에 추가됩니다.

나는 제거하는 동안 그 반대를 할 무언가를 찾고 있습니다. app.exe 프로세스를 중지하여 시스템 트레이에서 제거하려고합니다.

현재 내 제거로 인해 모든 파일이 제거되지만 app.exe는 계속 실행 중이며 시스템 트레이에 계속 표시됩니다. 나는 조건문을 추가 검토 한 :

If REMOVE~="ALL" then 
    *remove the app from the systray!* 
End 

조건부 문이 날만을 제거에 뭔가를 할 수있게된다, 그러나 나는 실제로 프로세스를 종료에 대해 갈 수있는 가장 좋은 방법의 확실하지 않다. 거기서 실행할 수있는 MSI 명령이 있습니까? 내가할만한 .exe를 써야합니까?

답변

2
objProcess.Terminate() 함수는 단지에 일하기를 거부 5 개월 전 우리는 같은 일을 VBScript를 작업을 사용하고, 마우스 오른쪽 무렵 그 SP3가 출시 된

일부 기계. 우리가 한 일에 상관없이, 그것은 단지 얼어 붙었습니다. 이것은 우리의 테스트 머신의 약 10 %에서 발생했기 때문에 대체 솔루션을 찾아야 만했습니다. (얼마나 많은 고객이 동결했는지 알고 있습니까?)

내 첫 발견은 inbuilt (Windows 2000 이후) 명령 TASKKILL 입니다. 예 : TASKKILL /IM app.exe /F하지만 VBScript에서 사용한 것처럼 비슷한 방법으로 프로세스를 종료하는 것처럼 보이기 때문에 해당 메서드도 실패합니다.

이제 우리는 sysinternals의 pskill.exe 도구를 사용하고 있습니다. 명령 줄 스위치를 사용하여 사용권 계약 프롬프트를 보류해야하지만 그 외에는 실행중인 EXE를 죽이는 가장 간단한 방법이었습니다 녹이다. 가장 좋은 방법은 자신의 EXE 또는 당신이 조금 C++를 알고 어떻게해야 할 DLL을 구축하는 것입니다 물론

, 즉 정리하지 않기 때문에)

+0

우리는 필요에 따라 언제든지 해당 경로를 사용할 수 있도록 사내 C++ 고객을 확보했습니다. pskil.exe는 내가 여기에서 활용할 수있을뿐만 아니라 몇 가지 다른 상황에서도 유용 할 수 있습니다. 당분간, 나는 그것을 시도 할 것이다. 문제가 발생하면 C++ 방식으로 진행합니다. 답변 해주셔서 감사합니다! –

0

VBscript 요소를 사용자 지정 작업으로 MSI에 삽입 할 수 있습니다. 이런 식으로 뭔가가 작업을 수행해야합니다

strMachine = "localhost" 
strAppName = "notepad.exe" 

Set objProcesses = GetObject("winmgmts://" & strMachine).ExecQuery("SELECT * FROM Win32_Process WHERE Caption LIKE '" & strAppName & "'") 

For Each objProcess In objProcesses 
    intRetVal = objProcess.Terminate(0) 
Next 
+0

내 경험에 비추어 볼 때 이것은 XP SP3을 실행하는 상당수의 컴퓨터에서 실패합니다. – saschabeaumont

+0

sascha가 말한 바에 따르면, 코드 샘플을 사용하는 것만 큼 간단 할 것입니다. 대답은 내 친구에게 감사드립니다! –

+0

문제가 없으면 포장하고 배포 할 때 pskill에 대한 사용권 계약을 확인하십시오. – Froosh

1

그냥 종료 프로세스가 충분하지 않습니다 Windows 알림 영역 (그러나 마우스는 다음에 마우스를 가져갈 때 Windows에서 일치하는 프로세스가없는 아이콘을 정리합니다). 그러나 앱을 갑작스럽게 종료하는 또 다른 이유는 일반적으로 디버깅에 가장 적합합니다. 불행히도 더 적절한 해결책이 더 많이 포함됩니다. 앱에 명명 된 이벤트를 생성하고 설정할 때 호출 할 콜백 메소드를 등록 할 수 있습니다. 콜백은 앱을 종료합니다. 그런 다음 이벤트를 설정하고 프로세스가 종료 될 때까지 대기하는 사용자 정의 작업을 작성합니다.

취소를 지원해야하는 경우 (예 :사용자에게 변경 사항을 저장하지 않고 취소하지 않기로 결정한 경우), 다른 명명 된 이벤트를 사용하여이를 나타낼 수 있으므로 사용자 정의 작업은 프로세스가 종료되거나 취소 이벤트가 발생할 때까지 기다립니다 (둘 중 빠른 날짜 적용).

+0

+1 제어 된 방식으로 응용 프로그램을 종료 할 수 있다면 (정상적으로 종료하라는 말) 항상 프로세스를 종료하는 것보다 더 나은 방법입니다. 이는 최후의 수단으로 만 수행해야합니다. –

0

app.exe를 집에서 만든 경우 현재 실행중인 app.exe를 종료하라는 명령 줄을 추가 할 수 있습니다. 명령 줄이 주어지면 프로그램의 첫 번째 인스턴스에 메시지 나 메시지를 보내 종료하고 프로그램의 첫 번째 인스턴스가 실제로 종료 될 때까지 기다리십시오. 그러면 설치 프로그램은 kill 스위치를 사용하여 프로그램을 실행할 수 있으며 kill 전환 인스턴스가 반환 될 때 원래 인스턴스가 없어 졌음을 알 수 있습니다.