2010-02-20 105 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