700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > NSIS安装或卸载时检查程序是否正在运行

NSIS安装或卸载时检查程序是否正在运行

时间:2021-06-07 00:54:29

相关推荐

NSIS安装或卸载时检查程序是否正在运行

转载:/z5337/p/4766415.html

转载:/nsisbuildqqstop.html

转载:/s/blog_6aeaee7e0100smrn.html(如果当前程序正在运行,杀掉进程继续安装或者卸载,给了启发)

转载:/llmys/article/details/88618177(教程)

使用场景:

如果我们要安装或升级程序时,软件正在运行,这个时候安装文件肯定会替换失败,友好的操作是提示用户结束正在运行的程序

准备工作:

1.检测程序是否在运行,需要使用插件FindProcDLL.dll,杀死当前运行的进程,需要使用插件KillProcDLL.dll

2.这两个插件的下载地址:/FindProcDLL_plug-in

3 .放到C:\Program Files (x86)\NSIS\Plugins里面

4. 添加脚本 安装时

//不提示用户 直接关闭进程

; ------ 安装前检查程序是否正在运行Function .onInitKill_Module:FindProcDLL::FindProc ${MAIN_MODULE_NAME}Pop $R0IntCmp $R0 1 0 no_runKillProcDLL::KillProc ${MAIN_MODULE_NAME}Sleep 1000FindProcDLL::FindProc ${MAIN_MODULE_NAME}Pop $R0IntCmp $R0 1 0 no_runGoto Kill_Module //这里递归可以清除多个同名进程no_run:FunctionEnd

//提示用户 用户点击关闭

Function .onInit; ------ 安装前检查程序是否正在运行StrCpy $IsPop "no"Kill_Module:FindProcDLL::FindProc ${MAIN_MODULE_NAME}Pop $R0IntCmp $R0 1 0 no_runIfSilent 0 +3KillProcDLL::KillProc ${MAIN_MODULE_NAME}Goto no_run${if} $IsPop == 'no'MessageBox MB_YESNO|MB_ICONSTOP "${MAIN_MODULE_NAME}正在运行,是否退出?" IDYES goon IDNO exit${else}Goto goon${Endif}exit:MyWndShadow::FreeShadow /NOUNLOAD $WarningForm ;SendMessage $HWNDPARENT "0x2" "" "" ; 给窗口加个销毁消息我这里简化KillProcDLL::KillProc "$EXEFILE"FindProcDLL::FindProc "$EXEFILE"Sleep 500Pop $R0${If} $R0 != 0KillProcDLL::KillProc "$EXEFILE"${EndIf}goon:KillProcDLL::KillProc ${MAIN_MODULE_NAME}StrCpy $IsPop "yes"Goto Kill_Moduleno_run:; ------ 做其他操作FunctionEnd

添加脚本 卸载时

//不提示用户 直接关闭进程

; ------ 卸载前检查程序是否正在运行Function un.onInitKill_Module:FindProcDLL::FindProc ${MAIN_MODULE_NAME}Pop $R0IntCmp $R0 1 0 no_runKillProcDLL::KillProc ${MAIN_MODULE_NAME}Sleep 1000FindProcDLL::FindProc ${MAIN_MODULE_NAME}Pop $R0IntCmp $R0 1 0 no_runGoto Kill_Module //这里递归可以清除多个同名进程no_run:FunctionEnd

//提示用户 用户点击关闭

Function un.onInit; ------ 安装前检查程序是否正在运行StrCpy $IsPop "no"Kill_Module:FindProcDLL::FindProc ${MAIN_MODULE_NAME}Pop $R0IntCmp $R0 1 0 no_runIfSilent 0 +3KillProcDLL::KillProc ${MAIN_MODULE_NAME}Goto no_run${if} $IsPop == 'no'MessageBox MB_YESNO|MB_ICONSTOP "${MAIN_MODULE_NAME}正在运行,是否退出?" IDYES goon IDNO exit${else}Goto goon${Endif}exit:MyWndShadow::FreeShadow /NOUNLOAD $WarningForm ;SendMessage $HWNDPARENT "0x2" "" "" ; 给窗口加个销毁消息我这里简化KillProcDLL::KillProc "$EXEFILE"FindProcDLL::FindProc "$EXEFILE"Sleep 500Pop $R0${If} $R0 != 0KillProcDLL::KillProc "$EXEFILE"${EndIf}goon:KillProcDLL::KillProc ${MAIN_MODULE_NAME}StrCpy $IsPop "yes"Goto Kill_Moduleno_run:; ------ 做其他操作FunctionEnd

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。