检查NSIS中的注册表 我正在使用NSIS为我在Visual C++ 2012 Express中所做的项目做一个可执行文件。因为我是初学者,所以我从HM NIS Edit中的安装向导开始 我试图将VisualC++ 2012重新分配到程序中,但是每次安装程序重新运行时,可重新分配的弹出“修复”和“删除”选项,这看起来很烦人。

检查NSIS中的注册表 我正在使用NSIS为我在Visual C++ 2012 Express中所做的项目做一个可执行文件。因为我是初学者,所以我从HM NIS Edit中的安装向导开始 我试图将VisualC++ 2012重新分配到程序中,但是每次安装程序重新运行时,可重新分配的弹出“修复”和“删除”选项,这看起来很烦人。,nsis,Nsis,所以我决定写一点NSIS脚本,这是到目前为止脚本的开始: Var STR Section CheckForReg ClearErrors ReadRegDWORD $0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}" "Version" ifErrors 0 Blank StrCpy $STR "$INSTDIR\vcredist_x86.exe" GoTo End

所以我决定写一点NSIS脚本,这是到目前为止脚本的开始:

Var STR
Section CheckForReg

ClearErrors
ReadRegDWORD $0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}" "Version"

ifErrors 0 Blank
StrCpy $STR "$INSTDIR\vcredist_x86.exe"
GoTo End

Blank:
    StrCpy $STR ""
End:

SectionEnd
这段代码在脚本的一开始就被调用,全局变量STR应用于:

!define MUI_FINISHPAGE_RUN $STR
不久之后

显然这是一个非常愚蠢的方法,但我不需要太多

问题是CheckForReg总是认为注册表不存在,并且不会移动到标签空白处。请注意,我每次都手动检查注册表,注册表项如下所示:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}]
"Version"="11.0.51106.1"
"DisplayName"="Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.51106"
所以问题是:我在这方面哪里出了问题?它看起来很简单,但很明显我有一些倒退


--已删除代码转储

您只能使用ReadRegDWORD读取DWORD

!include LogicLib.nsh ; So we don't have to use all these labels
StrCpy $STR ""
ReadRegStr $0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}" "Version"
${If} $0 == ""
  StrCpy $STR "$INSTDIR\vcredist_x86.exe"
${EndIf}

哈哈哈,伙计,难道我不觉得自己像个白痴吗:P答案很简单,应该是这样的。