我正在使用NSIS为我的应用程序创建一个设置,并且需要检查它是否已经安装:
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "MyAppInstaller.exe"
InstallDir "$PROGRAMFILES\MyApp"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
Function .onInit
; Check to see if already installed
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME} ${PRODUCT_VERSION}" "UninstallString"
IfFileExists $R0 +1 NotInstalled
Messagebox MB_ICONQUESTION|MB_YESNO "MyApp 1.0 is already installed.Do you want to uninstall old version" IDNO Quit
Exec $R0
Quit:
Quit
NotInstalled:
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd ...
但没有发生任何事情,它总是继续安装,并没有检测到旧的安装版本,我错过了什么?我不太了解NSIS脚本,所以任何帮助都将受到赞赏。
答案 0 :(得分:2)
我唯一的猜测是你检查错误的注册表项或者引用了返回的路径和/或有参数,所以文件存在检查失败。
在Messagebox mb_ok $R0
行之前验证IfFileExists
的路径,如果它为空,则应尝试Process Monitor,它可能会为您提供一些线索......