首页 > 解决方案 > NSIS ReadRegStr 找不到存在的注册表项

问题描述

我正在 Win 10 上制作一个简单的 NSIS 安装程序,但我遇到了一些功能问题ReadRegStrReadRegStr返回一个空字符串并设置一个错误标志,这意味着找不到该值。该值肯定存在(它是由我创建的)并且是正确的 REG_SZ 类型。

即使使用其他一些键也会发生相同的行为:

Powershell 可以毫无问题地找到值。

PS C:\Users\Admin\test> Get-ItemProperty -Path HKLM:\SOFTWARE\FooBar
(default)    : fb

nsi这是我正在使用的轻量级脚本

OutFile "Installer.exe"
Var FOO_VAR
!include LogicLib.nsh

Section
  ReadRegStr $FOO_VAR HKLM "SOFTWARE\FooBar" ""

  ${If} ${Errors}
    MessageBox MB_OK "Value not found"
  ${Else}
    MessageBox MB_OK "FooBar $FOO_VAR"
  ${EndIf}
SectionEnd

上述所有密钥至少对每个用户/安装程序都具有读取权限。还有什么可能导致这种情况?

标签: windowswindows-10registrynsis

解决方案


64 位 Windows 有两个注册表“视图”,32 位应用程序默认看到 32 位视图。您可以使用该SetRegView指令强制 32 位 NSIS 安装程序使用 64 位视图:

!include x64.nsh
!include LogicLib.nsh

Section
${If} ${RunningX64}
  SetRegView 64
  ReadRegStr ... value on 64-bit systems
  SetRegView LastUsed
${Else}
  ReadRegStr ... value on 32-bit systems
${EndIf}
SectionEnd

推荐阅读