NSIS ReadRegStr找不到存在的注册表项

问题描述 投票:0回答:1

我在Win 10上制作了一个简单的NSIS安装程序,我遇到了一些函数ReadRegStr的问题。 ReadRegStr返回一个空字符串并设置一个错误标志,这意味着无法找到该值。该值肯定存在(它是由我制作的)并且是一个合适的类型REG_SZ。

即使使用其他一些键,也会出现相同的行为:

  • HKLM软件\ FooBar(不工作)
  • HKLM软件\ Docker Inc. \ Docker \ 1.0(不工作)
  • HKLM SOFTWARE \ Classes / .3gp(工作)
  • HKCU Software \ Python \ PythonCore \ 3.6 \ InstallPath(工作)

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

上面的所有键至少具有每个用户/安装程序的读取权限。还有什么可能导致这个?

windows windows-10 registry nsis
1个回答
1
投票

64位Windows具有two registry "views"和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
© www.soinside.com 2019 - 2024. All rights reserved.