2010-11-17 60 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因此它创建失踪在我看来,每个部分都是可以的。