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

Nsis 在安装新版本之前卸载旧版本,nsis,Nsis,我是NSIS的新手,但是我想在安装新版本时检查现有已安装的旧版本。我做的和我在这里找到的完全一样-但是因为我需要检查是否安装了旧版本以正确卸载,我在安装进度中添加了InstallLocation注册表值 如果我使用ExecWait'$R0?=$INSTDIR',并且旧版本的安装文件夹与INSTDIR相同,那么一切都可以正常工作。但是如果我使用ExecWait“$R0”\ux?=$R1”,它会给我NSIS安装程序错误,但我就是找不到问题出在哪里,我做错了什么 有人能帮忙吗? 谢谢 通过以下方式添

我是NSIS的新手,但是我想在安装新版本时检查现有已安装的旧版本。我做的和我在这里找到的完全一样-但是因为我需要检查是否安装了旧版本以正确卸载,我在安装进度中添加了InstallLocation注册表值

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

有人能帮忙吗? 谢谢


通过以下方式添加注册表:


功能代码:



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

很抱歉,您能告诉我应该在哪里删除这些引号吗?我不明白.“$INSTDIR”,在WriteRegStr调用中,或者在ReadRegStr之后使用strcmp+strcpy
  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