NSIS 如何在卸载时检测软件是不是运行并提示用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSIS 如何在卸载时检测软件是不是运行并提示用户相关的知识,希望对你有一定的参考价值。

大意如题,为何下面的代码不成功Function un.onInit
FindProcDLL::FindProc "$(^Name).exe"
Pop $0
IntCmp $0 1 0 no_run
MessageBox MB_ICONSTOP "(你的程序)正在运行,请先关闭程序!"
Quit
no_run:
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
Abort
FunctionEnd难道FindProcDLL这个还需要声明?

哈哈,在你的空间里找到了答案!Function un.onInit
FindProcDLL::FindProc "BatchExecSQL.exe"
Pop $R0
StrCmp $R0 "1" AA BB
AA:
MessageBox MB_ICONSTOP "BatchExecSQL.exe正在运行,请先关闭程序!"
Quit
BB:
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
Abort
FunctionEnd
参考技术A 检查一下 "$(^Name).exe" 有没有问题 FindProcDLL当然是不需要声明的

NSIS 的卸载程序运行速度非常快

【中文标题】NSIS 的卸载程序运行速度非常快【英文标题】:NSIS' uninstaller works very fast 【发布时间】:2015-06-11 09:42:04 【问题描述】:

我不知道如何说它是title的缩写,但是 当我在静默模式下运行 NSIS 生成的卸载程序时,它会从主进程中分离出来并在后台工作。

这很好,但是当安装程序首先运行ExecWait uninstaller 时,它会立即完成,但实际上并没有卸载应用程序。因此,安装程序会尝试替换已执行但尚未被卸载程序关闭的可执行文件。有什么解决办法吗?

【问题讨论】:

【参考方案1】:

好的,我明白了。 NSIS 卸载程序将自身复制到临时目录,运行创建的临时卸载程序,然后退出。这样做是为了使其能够自行删除。 您可以使用以下命令行参数禁用此系统:

ExecWait '"$INSTDIR\uninstall.exe" _?=$INSTDIR'

当然,您必须将uninstall.exe 替换为您的卸载程序的名称。

【讨论】:

以上是关于NSIS 如何在卸载时检测软件是不是运行并提示用户的主要内容,如果未能解决你的问题,请参考以下文章

总是显示NSIS ERROR怎么办?卸载不了软件

NSIS 的卸载程序运行速度非常快

NSIS - 强制用户选择不同的目录

NSIS如何去掉卸载页面的是不是重启选择

为啥安装游戏出现nsis错误?

NSIS检测并卸载已有版本,静默卸载隐藏MessageBox