NSIS卸载程序不运行un.onInit

时间:2016-03-15 11:05:10

标签: nsis uninstall uninstaller uninstallstring

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

但是,从不显示messageBox(以及进程正在运行的消息)。所以我经历了很多文档,显然运行静默模式会阻止调用此方法,因此我将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函数?

编辑:

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

1 个答案:

答案 0 :(得分:0)

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