2010-11-17 50 views
4

給定一個註冊表路徑「\ a \ b \ c \ d」,我想爲'd'鍵添加一個值。問題在於 - 我不知道a,b或c是否存在,並且我希望代碼在不存在的情況下生成它們。有沒有一個快速的方法(使用一些我沒有見過的.NET方法)來做到這一點?我可以去迭代通過註冊表項的路線,並使用OpenSubKey/GetValue/SetValue方法來執行該過程,但希望避免重新發明輪子,如果我可以...如何在C#中添加嵌套的註冊表項/值?

注:我正在尋找的行爲與運行.reg文件(它將創建必要的子項)相同的行爲。

感謝,

阿薩夫

+1

您可以通過將密鑰實際寫入.reg文件並使用.NET中的系統命令運行來實現該結果,但這將是一種快速「非常髒」的解決方案,而且我不會真的推薦它... – 2010-11-17 16:58:17

回答

13

我不知道你可以做到這一點的內置,單一的電話。但是,您不需要調用OpenSubKey/GetValue等。對CreateSubKey的調用將創建一個新密鑰,或者在存在的情況下打開現有密鑰。

RegistryKey regKey = startingRootKey; 
string[] RegKeys = pathToAdd.split('\''); 
foreach (string key in RegKeys) { 
    regKey = regKey.CreateSubKey(key); 
} 
regKey.SetValue("ValueName", "Value"); 

忽略額外'在那裏,我需要它使格式化看起來是正確的。 ??

此外,請確保您在執行註冊表項添加時測試異常...有很多安全性和路徑方面可能會出錯。陷阱例外列表是here


編輯
我做這個太複雜了!我只是測試......下面會做的正是你想要的東西:

RegistryKey regKey = startingRootKey; 
regKey = regKey.CreateSubKey(@"a\b\c\d"); 
regKey.SetValue("ValueName", "Value"); 
regKey.Close(); 

它是足夠聰明的解析嵌套的路徑。只要確保你有@符號,否則它會將字符串視爲已經被轉義。

0

我不認爲有內置的東西,但註冊表路徑做一個字符串分割,然後通過它循環,做CreateSubKey(而不是OpenSubKey因此它創建失蹤在我看來,每個部分都是可以的。