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这个还需要声明?
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 如何在卸载时检测软件是不是运行并提示用户的主要内容,如果未能解决你的问题,请参考以下文章