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

时间:2019-02-14 11:34:44

标签: windows windows-10 registry nsis

我正在Win 10上制作一个简单的NSIS安装程序,而函数int LA[] = {1,3,5,7,8}; int item = 10, k = 3, n = 5; int i = 0, j = n; n = n + 1; while( j >= k) { printf("j+1 =%d",j+1); LA[j+1] = LA[j]; j = j - 1; } 遇到了一些问题。 ReadRegStr返回一个空字符串并设置一个错误标志,这意味着找不到该值。该值肯定存在(它是我自己制作的),并且是正确的REG_SZ类型。

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

  • HKLM SOFTWARE \ FooBar(不起作用
  • HKLM SOFTWARE \ Docker Inc. \ Docker \ 1.0(不起作用
  • HKLM SOFTWARE \ Classes / .3gp(有效
  • HKCU Software \ Python \ PythonCore \ 3.6 \ InstallPath(有效

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

ReadRegStr

这是我正在使用的轻量级PS C:\Users\Admin\test> Get-ItemProperty -Path HKLM:\SOFTWARE\FooBar (default) : fb 脚本

nsi

以上所有键均至少对每个用户/安装者具有读取权限。 还有什么可能导致这种情况?

1 个答案:

答案 0 :(得分: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