我在Win 10上制作了一个简单的NSIS安装程序,我遇到了一些函数ReadRegStr
的问题。 ReadRegStr
返回一个空字符串并设置一个错误标志,这意味着无法找到该值。该值肯定存在(它是由我制作的)并且是一个合适的类型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
上面的所有键至少具有每个用户/安装程序的读取权限。还有什么可能导致这个?
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