在 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 中它不起作用。任何帮助都会很棒。
编辑:
操作系统:windows7、64位
NSIS 版本:2.46
我猜你的应用程序 nsis 安装程序是 32 位的。
由于它是一个 32 位安装程序,每个注册表操作都会通过 windows 应用兼容性密钥 "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
不是一个好主意
只需从 32 位应用程序调用 Exec "regedit.exe"
即可启动 32 位 Regedit,这会导致 Wow6432Node\Wow6432Node 问题。
真正的解决方案是使用 Reg2Nsis 或其他一些转换工具将您的 .reg 文件转换为 WriteRegStr
和 SetRegView
指令。
您可以尝试 运行 64 位 Regedit 和这个丑陋的 hack:
!include x64.nsh
${DisableX64FSRedirection}
ExecWait '"$WinDir\Regedit.exe" /whatever'
${EnableX64FSRedirection}
我正在通过 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 中它不起作用。任何帮助都会很棒。
编辑: 操作系统:windows7、64位
NSIS 版本:2.46
我猜你的应用程序 nsis 安装程序是 32 位的。 由于它是一个 32 位安装程序,每个注册表操作都会通过 windows 应用兼容性密钥 "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
不是一个好主意
只需从 32 位应用程序调用 Exec "regedit.exe"
即可启动 32 位 Regedit,这会导致 Wow6432Node\Wow6432Node 问题。
真正的解决方案是使用 Reg2Nsis 或其他一些转换工具将您的 .reg 文件转换为 WriteRegStr
和 SetRegView
指令。
您可以尝试 运行 64 位 Regedit 和这个丑陋的 hack:
!include x64.nsh
${DisableX64FSRedirection}
ExecWait '"$WinDir\Regedit.exe" /whatever'
${EnableX64FSRedirection}