在安装新版本之前卸载旧版本

时间:2013-08-06 14:21:00

标签: nsis

我是NSIS的新手,但我想在安装新版本时检查现有已安装的旧版本。我完全像我在这里找到的那​​样 - http://nsis.sourceforge.net/Auto-uninstall_old_before_installing_new但是因为我需要检查是否安装了旧版本才能正确卸载,我将InstallLocation注册表值添加到安装进度中。

如果我使用ExecWait'$ R0 _?= $ INSTDIR'并且旧版本的安装文件夹与INSTDIR相同,则一切正常。但是如果我使用ExecWait'$ R0 _?= $ R1'它会给我NSIS安装程序错误,但我找不到问题出在哪里,我做错了什么?

有人可以帮忙吗? 感谢


注册表由此添加:


  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AppName}" "InstallLocation" '"$INSTDIR"'

功能代码:


ReadRegStr $R0 HKLM \
 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AppName}" \
 "UninstallString"

  StrCmp $R0 "" done

MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
    "${AppName} is already installed. $\n$\nClick OK to remove the \
    previous version or Cancel to cancel the installation." \
IDOK uninst
Abort

;Run the uninstaller
uninst:
   ReadRegStr $R1 HKLM \
   "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AppName}" \
   "InstallLocation"

    ClearErrors
    HideWindow
    ClearErrors
    ExecWait '$R0 _?=$R1'
    BringToFront

done:
functionEnd

1 个答案:

答案 0 :(得分:2)

您正在使用引号编写InstallLocation路径,不要在执行安装程序之前删除代码中的引号...