检查NSIS中的注册表

时间:2013-01-04 03:00:32

标签: nsis

我正在使用NSIS为我在Visual C ++ 2012 Express中执行的项目创建可执行文件。因为我是初学者,所以我开始使用HM NIS Edit中的安装向导。

我正在尝试将Visual C ++ 2012 Redistributable与我的程序捆绑在一起,但每次重新运行安装程序时,Redistributable都会弹出“Repair”& “删除”选项,这看起来很烦人。

所以我决定编写一些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始终认为注册表不存在,并且不会移动到标签Blank。作为一个注释,我每次都手动检查注册表,注册表项如下所示:

[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"

所以问题是:我在哪里出错?它看起来很简单,但显然我有一些倒退。

- 删除代码转储

1 个答案:

答案 0 :(得分:5)

您只能使用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}