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 normalSilentUnInstall 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

上损坏