我正在通过NSIS安装程序为我的应用程序打包。 在包装我需要为我的应用程序做一些registry项。 这些条目将位于registrypath“HKLM SOFTWARE Wow6432Node Microsoft”和“HKLM SOFTWARE Microsoft”中。
问题是当我通过NSIS中的[ExecWait“regedit.exe / s registry.reg”]命令导入registry时,registry项不会被添加到path“HKLM SOFTWARE Microsoft”,只能在其他条目将被添加。 并且在NSIS安装程序中,在“HKLM SOFTWARE Wow6432Node Wow6432Node Microsoft”这个path中会有一个新的条目,因为我没有在registry文件中包含任何类似的registry项。
我检查了registry文件,没有问题。 我试图通过直接运行registry文件,也试图直接在bat文件以及CMD(regedit.exe / s registry.reg)相同的命令。 所有工作正常。 只有在NSIS它不工作。 任何帮助将是伟大的。
编辑 : *** 作系统:windows 7,64位
NSISasynchronous文件下载和自定义进度条
简单的NSIS配方基本安装
如何用相对目标创build快捷方式(.lnk)?
创build一个空目录(NSIS)
“新安装的程序”如何工作?
NSIS版本:2.46
CACLS混乱
在linux上签名NSIS安装程序
如何安装AccessControl NSIS插件? 并授予完全访问子文件夹?
我怎么能从cygwin ssh运行一个win32 gui程序?
你如何在NSIS中设置目录权限?
我猜你的应用程序安装程序是32位的。 由于它是一个32位安装程序,每个注册表 *** 作都会通过应用兼容性关键字“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 \’\”$WinDirRegedit.exe\” /whatever\’ ${EnableX64FSRedirection}
总结
以上是内存溢出为你收集整理的在NSIS中导入registry项时出错全部内容,希望文章能够帮你解决在NSIS中导入registry项时出错所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容