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

原文 NSIS:安装、卸载时检查程序是否正在运行

如果我们要安装或升级的程序正在运行,文件肯定会替换不成功,以下代码可以提示用户结束正在运行的程序。

需要使用插件FindProcDLL.dll,下载路径:http://nsis.sourceforge.net/FindProcDLL_plug-in
 

开始安装时检查是否正在运行:

01 Function .onInit
02   ;关闭进程
03   Push $R0
04   CheckProc:
05     Push "flighty.exe"
06     ProcessWork::existsprocess
07     Pop $R0
08     IntCmp $R0 0 Done
09     MessageBox MB_OKCANCEL|MB_ICONSTOP "安装程序检测到 ${PRODUCT_NAME} 正在运行。$\r$\n$\r$\n点击 “确定” 强制关闭${PRODUCT_NAME},继续安装。$\r$\n点击 “取消” 退出安装程序。" IDCANCEL Exit
10     Push "hfkjc.exe"
11     Processwork::KillProcess
12     Sleep 1000
13     Goto CheckProc
14     Exit:
15     Abort
16     Done:
17     Pop $R0
18 FunctionEnd

开始卸载时检查是否正在运行:

01 Function un.onInit
02   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
03   Abort
04   ;检测程序是否运行
05   FindProcDLL::FindProc "flighty.exe"
06    Pop $R0
07    IntCmp $R0 1 0 no_run
08    MessageBox MB_ICONSTOP "卸载程序检测到 ${PRODUCT_NAME} 正在运行,请关闭之后再卸载!"
09    Quit
10    no_run:
11 FunctionEnd

顺便提一句:如果你的程序被360误杀过,可以用这个提示用户关闭360才可以进行安装。

时间: 2024-10-29 15:04:19

NSIS:安装、卸载时检查程序是否正在运行的相关文章

NSIS:卸载时选择组件

原文 NSIS:卸载时选择组件   有时候,我们想要在卸载时也可以选择组件,进行定制性的卸载,那么,以下文字将简略讨论这个问题:   题外:我们想要卸载时选择组件,当然是在安装时要有组件选择页面的前提下,也就是说,在安装目录选择页面前面加组件选择页面 !insertmacro MUI_PAGE_COMPONENTS 当然,这不是必须的,但如果你没有加这个页面,编译脚本时会出错,虽然,NSIS会忽略这些错误.   下面正式开始: 在安装卸载过程页面前边加卸载选择组件页面 !insertmacro

WinXP安装软件时出现NSIS ERROR错误解决方法

  WinXP安装软件时出现NSIS ERROR错误解决方法.虽然微软已经停止对WinXP的支持,还是有不少用户依然坚持使用XP,不过在安装软件的时候也会出现一些问题,近日有小伙伴说会出现NSIS ERROR的错误,这是什么原因造成的呢?又要如何解决,下面就让小编一一道来. 一.NSIS ERROR什么意思 系统错误提示英文为"installer integrity check has failed. common causes include incomplete download and d

求VS制作安装项目经验:指定卸载时不删除某些文件、在卸载前判断如果不符合条件则取消卸载等

问题描述 用VS制作安装项目,要求可以指定卸载时不删除某些文件.在卸载前判断如果不符合条件则取消卸载(取消卸载的代码怎么写?例如要调用什么方法或发送什么消息)等,另外,还发现OnBeforeInstall比Install还要晚调用,怎么回事?请高手指点,万分感谢!具体的需求如下:1.卸载前判断程序是否正在运行,如果正在运行则提示用户"先退出程序,然后再重新执行卸载操作",跟着安装程序应该能取消本次安装操作.2.卸载后要保留安装位置处的用户数据文件,不要删除掉,在下次安装后可以使用这些数

eclipse android-在BOIS里面已开启VT,但安装HAXM时还是提示错误,VT未运行

问题描述 在BOIS里面已开启VT,但安装HAXM时还是提示错误,VT未运行 大神帮帮忙, 在BOIS里面已开启VT,但安装HAXM时还是提示错误,VT未运行 解决方案 cpu本身是什么型号,部分celeron和pentium处理器硬件不支持,那就没办法了. 解决方案二: http://jingyan.baidu.com/article/e4d08ffdb298080fd2f60dc1.html 解决方案三: 噢噢,我知道怎么回事了,原来没安装蓝牙驱动,把蓝牙驱动安装了就能安装了,也不知道为啥

centos6-CENTOS6.5安装Oracle时运行runInstaller报错

问题描述 CENTOS6.5安装Oracle时运行runInstaller报错 求助大能如何解决libXp包已经装了.错误提示如下:[oracle@localhost database]$ ./runInstaller Starting Oracle Universal Installer... Checking installer requirements... Checking operating system version: must be redhat-3 SuSE-9 redhat-

谁能给我讲讲:程序安装或者卸载时,安装/卸载程序通常会进行哪些“秘密”的操作

问题描述 我只知道有些程序安装时会修改注册表,别的什么的就不知道了,谁给揭示下其中的这些不为人知的秘密啊? 解决方案 解决方案二:我看到分数就进来了楼主你对秘密操作的定义是怎样的?解决方案三:都是自己写的脚本.解决方案四:解压.复制.更改注册表.删除文件.初始化.注册服务,还有很多可以做的事情--解决方案五:安装.卸载时你可能认为的秘密操作都可能会有,安装或卸载的同时就可以执行.启动相应的程序,这些程序有的会成为服务,有的会修改注册表,有的一系列过程会执行批处理,有的可能植入木马,当然这个是被别

web setup 如何判断程序已安装?卸载时提示用户是否要备份虚拟目录下的access db?

问题描述 websetup如何判断程序已安装?卸载时提示用户是否要备份虚拟目录下的accessdb?vs.net2005c#+access+asp.net我的打包程序想实现:1.判断是否已安装,如果已安装,用户要覆盖原来程序,提示是否备份数据库.2.卸载时提示用户是否要备份数据库?请大家给点思路,代码谢谢 解决方案 解决方案二:up解决方案三:?解决方案四:mark解决方案五:引用3楼begonia_ref的回复: mark

用自删除dll实现应用程序的安装/卸载代码

[译者]:本文译自 Alex Tilles 在 Windows Developer Network (2003 第12期)发表的一篇文章:"Writing Your Own Install and Uninstall Code".这是一篇具有一定技术含量的文章,相信许多开发人员都需要本文介绍的技术,其中包括几个重要的技术点: Rundll32.exe 实用程序的使用方法: DLL 或 EXE 的自删除技术: 嵌入资源的处理技巧: LZCOPY API 使用示范: compress.ex

迅雷显示“先前程序的安装/卸载未完成”

原因:安装时出现如下情况, 先前程序的安装/卸载未完成.您需要重新启动您的电脑才能完成安装. 在重新启动电脑后,在完成 迅雷 的安装. 安装程序无法继续.请单击"取消"退出. 解决办法: 开始 - 运行 - regedit - HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSession Manager 找到根目录里面的 PendingFileRenameOperations. 删除它即可! 总结:出现其它类似问题参照该方法!