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

时间:2016-11-02 08:06:30

标签: windows registry 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”路径中将有一个新条目,它来自任何地方,因为我没有在注册表文件中包含任何类似的注册表项。 / p>

我检查了注册表文件,没有问题。我尝试直接运行注册表文件,并直接在bat文件和CMD(regedit.exe / s registry.reg)中尝试相同的命令。一切正常。仅在NSIS中它不起作用。任何帮助都会很棒。

修改: 操作系统:windows 7,64位

NSIS版本:2.46

2 个答案:

答案 0 :(得分:1)

我猜您的应用程序安装程序适用于32位。 由于它是32位安装程序,因此每个注册表操作都会由应用兼容性密钥" Wow6432Node"的窗口自动转换。 请参阅此link有关注册表重定向的信息

用于在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不是一个好主意

答案 1 :(得分:1)

从32位应用程序调用{​​{1}}将启动32位Regedit,这会导致Wow6432Node \ Wow6432Node问题。

真正的解决方案是使用Reg2Nsis或其他转化工具将.reg文件转换为Exec "regedit.exe"WriteRegStr说明。

您可以尝试使用这个丑陋的黑客运行64位Regedit:

SetRegView
相关问题