2012-10-25 119 views
0

我不知道如何把這個放在這裏,我會盡我所能。請幫我解決卸載程序在安裝程序退出後仍在運行

我有一個補丁安裝程序,它按照預期安裝和卸載。但從程序文件中卸載補丁後,我試着卸載其他軟件。我收到了一條彈出消息,告知卸載完成後卸載。

所有我想到的是在卸載我的補丁的結尾,我通過執行.exe文件啓動一個進程。我的卸載程序等待該進程退出,我不想退出。

我的其他選擇是強制用戶在卸載補丁後重啓,我不想這樣做。

我試着Exec,ExecDos和ExecCmd與/ ASYNC,但我仍然看到相同的問題。

嘗試1

ExecShell open "$INSTDIR\system\teven.exe" 

嘗試2

ExecDos::exec /NOUNLOAD /ASYNC "$INSTDIR\system\teven.exe" "" 
Pop $0 
ExecDos::isdone /NOUNLOAD $0 

誰能幫我解決這個問題。我如何啓動teven.exe並讓它運行,並使我的卸載程序不會等待teven.exe退出。

回答

1

如果您要在卸載程序完成後執行其他操作,您幾乎必須強制卸載程序等待。當您從添加/刪除程序中卸載時,Windows甚至會強制等待卸載程序啓動的所有子進程...

如果要等待,爲什麼要使用/ ASYNC? (編輯:我想你不想等待?)ExecDos::isdone不等,它只是檢查,如果你想等待,使用ExecDos::wait

如果你不使用高級選項,不需要再輸入標準輸入你並不真正需要使用第三方插件:

如果teven是一個控制檯應用程序,你要隱藏控制檯窗口(和等待):

nsExec::Exec '"$INSTDIR\system\teven.exe"' 

否則:

ExecWait '"$INSTDIR\system\teven.exe"' 

如果你真的不想等待,你可以使用Exec但Windows可能會迫使等待anywa y卸載時...

+0

Ohoo !!我不知道如果從「添加/刪除」中卸載,窗口強制等待。有什麼辦法可以獨立啓動一個進程而不是子進程,以便添加/刪除認爲卸載已完成 – Vivek

+1

不,不是真的,它是通過設計修復一些舊的(InstallShield?)卸載程序。有http://nsis.sourceforge.net/Escape_ARP_Job_With_New_Process,但我不知道它是否適用於每個版本的Windows ... – Anders

相關問題