NSIS 卸载程序没有 运行 un.onInit
NSIS uninstaller doesn't run un.onInit
在我的 .nsi 文件中,我在 un.onInit
函数中有以下逻辑:
Function un.onInit
MessageBox MB_YESNO "This will uninstall. Continue?" IDYES checkRunning
checkRunning:
FindProcDLL::FindProc "app.exe"
IntCmp $R0 1 0 notRunning
MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${PRODUCT} is running, please close it so the installation can proceed." /SD IDCANCEL IDRETRY checkRunning
Abort
notRunning:
!insertmacro Init "uninstaller"
FunctionEnd
但是,消息框(进程是 运行 消息)从未显示。所以我查阅了很多文档,显然 运行 静默模式会阻止调用此方法,因此我将 SilentInstall normal
和 SilentUnInstall normal
添加到 .nsi 文件中。但是,这也不管用。
我尝试通过手动转到 uninstall.exe 和 运行 安装程序来调用卸载程序,该安装程序检查是否已经安装了一个版本以及是否正在调用:
uninst:
ClearErrors
ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall${PRODUCT}" "UninstallString"
StrCmp $R0 "" done
Abort
然而,这两个调用都不会触发 'normal' 模式。那么如何让我的 un.onInit 函数被调用呢?
编辑:
由于有人要求提供整个文件,here it is。我只复制了相关部分,但如果需要更多内容,请随时查看。请注意,整个文件已经很旧了,我只是更新它。
在升级 MUI2(现代用户界面 2.0)、降级到 NSIS 2.5 并使用 NsProcess 插件后,我开始工作了。现在正在调用该函数,并且我的检查可以使用新插件进行。 FindProcDLL 插件在 NSIS > 2.46
上损坏
在我的 .nsi 文件中,我在 un.onInit
函数中有以下逻辑:
Function un.onInit
MessageBox MB_YESNO "This will uninstall. Continue?" IDYES checkRunning
checkRunning:
FindProcDLL::FindProc "app.exe"
IntCmp $R0 1 0 notRunning
MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${PRODUCT} is running, please close it so the installation can proceed." /SD IDCANCEL IDRETRY checkRunning
Abort
notRunning:
!insertmacro Init "uninstaller"
FunctionEnd
但是,消息框(进程是 运行 消息)从未显示。所以我查阅了很多文档,显然 运行 静默模式会阻止调用此方法,因此我将 SilentInstall normal
和 SilentUnInstall normal
添加到 .nsi 文件中。但是,这也不管用。
我尝试通过手动转到 uninstall.exe 和 运行 安装程序来调用卸载程序,该安装程序检查是否已经安装了一个版本以及是否正在调用:
uninst:
ClearErrors
ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall${PRODUCT}" "UninstallString"
StrCmp $R0 "" done
Abort
然而,这两个调用都不会触发 'normal' 模式。那么如何让我的 un.onInit 函数被调用呢?
编辑:
由于有人要求提供整个文件,here it is。我只复制了相关部分,但如果需要更多内容,请随时查看。请注意,整个文件已经很旧了,我只是更新它。
在升级 MUI2(现代用户界面 2.0)、降级到 NSIS 2.5 并使用 NsProcess 插件后,我开始工作了。现在正在调用该函数,并且我的检查可以使用新插件进行。 FindProcDLL 插件在 NSIS > 2.46
上损坏