NSIS如何编写带参数的函数

阅读: 评论:0

NSIS如何编写带参数的函数
NSIS脚本对于传参的⽀持不好,当传⼊参数时需要⼿动push参数(类似汇编)。
例如以下的函数常⽤于在安装时杀死进程
Function ForceKillProcessImp
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_ICONQUESTION|MB_YESNO "⽆法终⽌$1,是否重试?" IDYES try_kill_one IDNO fail_quit
文献研究法fail_quit:
Quit
check_no_more:
FindProcDLL::FindProc "$1"
Pop $R0
IntCmp $R0 1 fail_to_kill  ; 如果FindProc结果为1,表⽰到了程序,说明杀进程失败,否则继续
FunctionEnd
这个函数被设计为传⼊⼀个参数,将参数指定的进程杀死。
需要这样调⽤:
$0 = "123456"
聚四氟乙烯涂层
Push $0小提琴独奏夏夜
Call ForceKillProcessImp
每⼀个进程都需要调⽤⼀次,当某些产品的相关进程很多,或者时要在多个地⽅判断时就会⾮常不⽅便。可以使⽤宏将改进以上代码使得更
简洁⽅便,如下:
!macro ForceKillProcess EXEName
杜香油push ${EXEName}
珍妮特 李Call ForceKillProcessImp
!macroend
这样,在需要杀死进程的地⽅做如下调⽤即可:
!insertmacro ForceKillProcess ""
!insertmacro ForceKillProcess ""
黄晨霄
!insertmacro ForceKillProcess ""
上⾯的!insertmacro这个指令告诉编译器将ForceKillProcess这个宏代表的指令插⼊到NSIS的源码中。
相当于:
push “”
Call ForceKillProcessImp
push “”
Call ForceKillProcessImp
push “”
Call ForceKillProcessImp
对⽐以下可见使⽤宏的⽅式明显更加简单清晰。

本文发布于:2023-07-11 07:03:14,感谢您对本站的认可!

本文链接:https://patent.en369.cn/xueshu/200125.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   参数   杀死
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图