NSIS安装过程中判断程序是否运行中,FindProcDLL和KillProcDLL

来源:互联网 发布:福昕阅读器mac版 编辑:程序博客网 时间:2024/06/05 20:32

FindProcDLL::FindProc {process_name} 返回值: 0 - 未找到 1 - 找到

KillProcDLL::KillProc {process_name} 0 - 杀进程成功 603 - 未找到此进程(也有可能是无法访问进程,如因用户权限问题等) 其它 - 各种错误

所以,在杀进程时,如果返回603,最后再findproc一下,确认是否进程不存在。 一般示例代码:

!macro DefFunc_ForceKillProcess unFunction ${un}ForceKillProcess    Pop $0  ; module name    Pop $1  ; exe nametry_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),请手动终止此程序后重试"Quitcheck_no_more:FindProcDLL::FindProc "$1"Pop $R0IntCmp $R0 1 fail_to_kill  ; 如果FindProc结果为1,表示找到了程序,说明杀进程失败,否则继续no_more:FunctionEnd!macroend 
0 0
原创粉丝点击