windows - NSIS ReadRegStr 找不到存在的注册表项
问题描述
我正在 Win 10 上制作一个简单的 NSIS 安装程序,但我遇到了一些功能问题ReadRegStr
。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 可以毫无问题地找到值。
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 有两个注册表“视图”,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
推荐阅读
- ios - 如何将保存按钮设置为 swift 5?
- sql-server - 如何使用 SQL Server 数据库、EF Core 和 LINQ 进行词法字符串比较 >=?
- javascript - 从 Amazon S3 下载 res.download 文件
- javascript - 如何为大于 0 的数字编写嵌套 for 循环
- python - Trace Operation in Python not Forming Correct Array Shape
- python - 关于 ImageHash 库中哈希的减号运算符的困惑
- hibernate - WebSphere 9 上的休眠间接 JNDI 绑定
- python - 使用机器学习进行文档分类
- autodesk-forge - 伪造查看器 - 如何与查看器一起显示对象树/组件树?
- python - 有向无环图的高效遍历