使用 C++ 导入注册表文件
Posted
技术标签:
【中文标题】使用 C++ 导入注册表文件【英文标题】:Using C++ to import registry files 【发布时间】:2010-02-20 00:21:42 【问题描述】:我在让以下简单代码正确运行时遇到了一些问题:
#include <process.h>
int main( void )
system("foo.reg"); //why does this NOT WORK?!
//system("reg import foo.reg"); //why does this NOT WORK?!
//system("regedit \"foo.reg\""); //why does this NOT WORK?!
return 0;
注册表文件位于编译的可执行文件所在的目录中。 foo.reg 在我从命令行运行时运行成功,但运行上述程序只显示 regedit 确认窗口,注册表本身并没有相应的变化。
我使用 Dev-C++ 编写程序,我运行的是 Windows XP x64 版本 SP2。任何帮助将不胜感激。
【问题讨论】:
是否可能更改 32 位注册表而不是 64 位注册表? 后两行不起作用,因为它们被注释掉了。 @bta: 我猜他已经知道了:) 【参考方案1】:system("regedit /s foo.reg");
应该在没有任何确认对话框的情况下静默导入它。 Refer here 用于 regedit.exe 的命令行选项。但是,我会怀疑有问题的注册表文件(foo.reg);检查它是否正确。同样在运行它之后,请确保您在注册表中检查foo.reg
修改的正确路径。
附带说明,C 标准库的 system()
函数在 stdlib.h
中声明,因此它应该是:
#include <stdlib.h>
int main()
system("regedit /s foo.reg");
return 0;
编辑:
我认为导入已经成功了;既然您提到它是 64 位 XP 机器,我认为更改将位于 Wow6432Node
之下。例如。 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
或 HKEY_CURRENT_USER\SOFTWARE\Wow6432Node
。所以也检查一下Wow6432Node
。 See this post 和 MSDN 了解更多信息。
【讨论】:
system("regedit /s foo.reg") 保持沉默,但它没有更改注册表中的任何内容,还添加了包含的“.reg
文件对注册表所做的更改,则可以直接使用注册表操作函数(msdn.microsoft.com/en-us/library/ms724875%28VS.85%29.aspx)。以上是关于使用 C++ 导入注册表文件的主要内容,如果未能解决你的问题,请参考以下文章