NSIS安裝過程中判斷程式是否執行中,FindProcDLL和KillProcDLL
阿新 • • 發佈:2019-01-04
FindProcDLL::FindProc {process_name} 返回值: 0 - 未找到 1 - 找到
KillProcDLL::KillProc {process_name} 0 - 殺程序成功 603 - 未找到此程序(也有可能是無法訪問程序,如因使用者許可權問題等) 其它 - 各種錯誤
所以,在殺程序時,如果返回603,最後再findproc一下,確認是否程序不存在。 一般示例程式碼:
!macro DefFunc_ForceKillProcess un Function ${un}ForceKillProcess Pop $0 ; module name Pop $1 ; exe name try_kill_one: KillProcDLL::KillProc "$1" Pop $R0 IntCmp $R0 0 try_kill_one ; 返回0表示殺程序成功,則應繼續殺此程序名的其它程序 IntCmp $R0 603 check_no_more ; 返回603表示沒找到此程序,有兩種情況:a) 確實沒有此程序 b) 因許可權等原因無法訪問此程序,如果第2種,應認為殺程序失敗,所以需要進一步檢查 fail_to_kill: ; KillProc返回值非0非603,或返回603但實際上此程序仍存在,均表示殺程序失敗 MessageBox MB_ICONSTOP "無法終止 $0 ($1),請手動終止此程式後重試" Quit check_no_more: FindProcDLL::FindProc "$1" Pop $R0 IntCmp $R0 1 fail_to_kill ; 如果FindProc結果為1,表示找到了程式,說明殺程序失敗,否則繼續 no_more: FunctionEnd !macroend