繁体   English   中英

在NSIS中导入注册表项时出错

[英]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文件转换为WriteRegStrSetRegView指令。

您可以尝试使用此丑陋的技巧运行64位Regedit:

!include x64.nsh
${DisableX64FSRedirection}
ExecWait '"$WinDir\Regedit.exe" /whatever'
${EnableX64FSRedirection} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM