[英]Error while importing registry entries in NSIS
我正在通过NSIS设置为我的应用程序包装。 在包装器中,我需要为我的应用程序做一些注册表项。 这些条目将位于注册表路径“ HKLM \\ SOFTWARE \\ Wow6432Node \\ Microsoft”和“ HKLM \\ SOFTWARE \\ Microsoft”中。
问题是当我通过NSIS中的[ExecWait” regedit.exe / s Registry.reg”]命令导入注册表时,该注册表项不会添加到路径“ HKLM \\ SOFTWARE \\ Microsoft”,仅在其他位置条目将被添加。 与此同时,在NSIS安装程序中,路径“ HKLM \\ SOFTWARE \\ Wow6432Node \\ Wow6432Node \\ Microsoft”中将有一个新条目,该条目无处不在,因为我没有在注册表文件中包括任何提及的注册表项。
我检查了注册表文件,它没有问题。 我尝试直接运行注册表文件,也直接在bat文件和CMD(regedit.exe / s Registry.reg)中尝试了相同的命令。 一切都很好。 仅在NSIS中它不起作用。 任何帮助都会很棒。
编辑 :操作系统:Windows 7、64位
NSIS版本:2.46
我猜您的应用程序nsis安装程序适用于32bit。 由于它是32位安装程序,因此每个注册表操作都会由Windows应用兼容密钥“ Wow6432Node”自动转换。 看到此链接有关注册表重定向
在32位和64位注册表之间进行切换,您的代码应如下所示:
SetRegView 64
WriteRegDWORD HKLM "SOFTWARE\<Key1>\<Key2>" "Value" 0
SetRegView 32
WriteRegStr HKLM "SOFTWARE\<Key1>\<Key2>" "Value" "1"
由于nsis具有自己的用于修改Windows注册表的本机功能,因此使用ExecWait regedit.exe /s registry.reg
并不是一个好主意
仅从32位应用程序调用Exec "regedit.exe"
就会启动32位Regedit,这会导致Wow6432Node \\ Wow6432Node问题。
真正的解决方案是使用Reg2Nsis或其他转换工具将您的.reg文件转换为WriteRegStr
和SetRegView
指令。
您可以尝试使用此丑陋的技巧运行64位Regedit:
!include x64.nsh
${DisableX64FSRedirection}
ExecWait '"$WinDir\Regedit.exe" /whatever'
${EnableX64FSRedirection}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.