使用 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\Wow6432NodeHKEY_CURRENT_USER\SOFTWARE\Wow6432Node。所以也检查一下Wow6432Node。 See this post 和 MSDN 了解更多信息。

【讨论】:

system("regedit /s foo.reg") 保持沉默,但它没有更改注册表中的任何内容,还添加了包含的“”。并且注册表文件是正确的;如果我双击文件本身,它会提示我确认,但之后它会更新注册表。 我查看了 Wow6432Node 文件夹,但它没有包含我正在更新的注册表文件...难道为了更改注册表文件,我需要使用系统以外的其他功能()? 仅供参考,我正在尝试在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 下编辑信息 @Max H:如果您知道.reg 文件对注册表所做的更改,则可以直接使用注册表操作函数(msdn.microsoft.com/en-us/library/ms724875%28VS.85%29.aspx)。

以上是关于使用 C++ 导入注册表文件的主要内容,如果未能解决你的问题,请参考以下文章

怎么把dll文件导入注册表

在域环境里面,如何一次性批量将注册表文件全部导入客户机里面?答对追加200

怎么把文件写入注册表

reg文件导入注册表后出现中文乱码的解决方法

C++,解析二进制注册表文件(regf)

导入了你的那三个注册表,时间时区能改了,但都是GMT的,怎么改成UTC的?