NSIS查找和杀进程详解

本文详细介绍了如何使用NSIS的FindProcDLL和KillProcDLL宏来查找和结束指定进程。通过示例代码展示了在遇到权限问题时的检查方法,以确保进程已被成功终止。
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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值