2010-02-20 102 views
-1

我在得到以下简单的代码才能正确运行的一些问题:导入注册表文件

#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从命令行运行时运行成功,但运行上述程序只显示注册表确认窗口,并且在注册表本身没有相应的更改。

我用开发-C++写的程序,我运行Windows XP 64位版本的SP2。任何帮助将不胜感激。

+3

是否可能更改32位注册表而不是64位注册表? – 2010-02-20 00:38:46

+2

后两行因为被注释掉而不起作用。 – bta 2010-02-20 00:56:12

+0

@bta:我想他知道它已经:) – legends2k 2010-02-20 00:59:16

回答

3

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。所以请检查Wow6432NodeSee this postMSDN欲了解更多信息。

+1

系统(“注册表编辑器/ s的foo.reg”)沉默了,但它并没有在注册表中的任何改变,与包括“”增加了。 并且注册表文件是正确的;如果我双击文件本身,它会提示我确认,但之后它会更新注册表。 – 2010-02-22 13:51:57

+0

我查了一下Wow6432Node文件夹,但它没有包含我正在更新的注册表文件... 难道是为了更改注册表文件,我需要使用system()以外的其他函数? – 2010-02-22 14:57:34

+0

仅供参考,我想下 HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows NT \ CURRENTVERSION \ Winlogon中 – 2010-02-22 17:07:44