1

在我的 .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

然而,这两个调用都不会触发到“正常”模式。那么我怎样才能让我的 un.onInit 函数被调用呢?

编辑:

正如有人要求提供整个文件,这里是. 我只复制了相关部分,但如果需要更多内容,请随时查看。请注意,整个文件已经很老了,我只是在更新它。

4

1 回答 1

1

在升级 MUI2(现代用户界面 2.0),降级到 NSIS 2.5 并使用NsProcess插件后,我得到了它的工作。现在正在调用该函数,并且我的检查使用新插件进行。FindProcDLL 插件在 NSIS > 2.46 上损坏

于 2016-03-17T15:22:59.567 回答