2014-01-26 55 views
0

我需要幫助才能導出C++中的註冊表項。如何在C++中導出註冊表項

cmd = " reg.exe export \"HKLM\\software\\Far manager\" \"C:\Users\\user\\Desktop\\test.reg\" "; 
    // printf("cmd = %s\n", cmd); 
    system(cmd); 

的代碼不能正常工作,因爲一個名爲「遠東經理」包括一個空格,告訴我「錯誤:系統找不到指定的註冊表項或值」。

但是,如果我使用沒有空格的名稱,例如「Mozilla」,該程序很有用。

我想使用「遠%20%管理器」和遠%backspace%管理器,但它不起作用。

但是,如果我在cmd中編寫命令(reg.exe export "HKLM\software\Far manager" "%userprofile%\\Desktop\\test.reg"),它的效果很好。

+0

該代碼看起來不錯。我期望真正的問題是註冊表重定向。你的機器是64位的操作系統嗎?你的進程是32位嗎?在這種情況下,註冊表重定向是個問題。 –

+0

您可能只想使用Windows API來執行此操作。 [這是註冊表訪問的Windows API參考](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724871(v = vs.85).aspx) – chbaker0

+0

我使用64位操作系統,但是Far經理也是64bit。 WinAPI以二進制格式導出註冊表項,但我需要.reg文件。 –

回答

1

如果您在致電system()時有任何特殊字符或空格,則必須將整個命令封裝在一組額外的雙引號中(即\")。對於你的例子:

cmd = "\"reg.exe export \"HKLM\\software\\Far manager\" \"C:\\Users\\user\\Desktop\\test.reg\"\""; 
system(cmd); 

查看here瞭解更多信息。

+0

不能再次工作。但是,如果我在cmd(reg.exe導出「HKLM \ software \遠程管理器」「%userprofile%\\ Desktop \\ test.reg」)中寫入命令,它會很好。 –

+0

@AlexLian請在'Users'之前添加額外的\以嘗試更新的答案。 – herohuyongtao