NSIS查詢和殺程序詳解
阿新 • • 發佈:2019-01-06
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
返回值:
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