1. 程式人生 > >NSIS查詢和殺程序詳解

NSIS查詢和殺程序詳解

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