Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中添加嵌套的注册表项/值?_C#_.net_Registry - Fatal编程技术网

如何在C#中添加嵌套的注册表项/值?

如何在C#中添加嵌套的注册表项/值?,c#,.net,registry,C#,.net,Registry,给定注册表路径“\a\b\c\d”,我想向项“d”添加一个值。问题是——我不知道a、b或c是否存在,如果它们不存在,我希望代码生成它们。有没有一种快速的方法(使用一些我没见过的.NET方法)来实现这一点?我可以遍历注册表项并使用OpenSubKey/GetValue/SetValue方法来执行这个过程,但如果可以的话,我希望避免重新发明轮子 注意:我正在寻找的行为与运行.reg文件时得到的行为相同(它将创建必要的子键) 谢谢 Assaf我认为没有内置任何东西,但在我看来,在注册表路径上进行字符串

给定注册表路径“\a\b\c\d”,我想向项“d”添加一个值。问题是——我不知道a、b或c是否存在,如果它们不存在,我希望代码生成它们。有没有一种快速的方法(使用一些我没见过的.NET方法)来实现这一点?我可以遍历注册表项并使用OpenSubKey/GetValue/SetValue方法来执行这个过程,但如果可以的话,我希望避免重新发明轮子

注意:我正在寻找的行为与运行.reg文件时得到的行为相同(它将创建必要的子键)

谢谢


Assaf

我认为没有内置任何东西,但在我看来,在注册表路径上进行字符串拆分,然后在其中循环并在每个部分上执行(而不是
OpenSubKey
,这样它会创建缺少的一个)是可以的。

我不知道有内置的单次调用可以做到这一点。但是,您不需要调用OpenSubKey/GetValue等。调用
CreateSubKey
将创建一个新键,或者打开现有键(如果存在)

RegistryKey regKey = startingRootKey;
string[] RegKeys = pathToAdd.split('\'');
foreach (string key in RegKeys) {
    regKey = regKey.CreateSubKey(key);
}
regKey.SetValue("ValueName", "Value");
忽略其中的多余部分,我需要它使格式看起来正确

另外,确保在执行注册表项添加时测试异常。。。有很多安全和路径方面的问题可能会出现。陷阱的异常列表如下所示


编辑
我把事情弄得太复杂了!我刚测试过。。。以下内容将完全满足您的要求:

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

它非常聪明,可以解析嵌套路径。只需确保您有@符号,否则它会将字符串视为已转义。

您可以通过实际将密钥写入.reg文件,并使用.NET中的系统命令运行它来实现该结果,但这将是一个快速的“脏”解决方案,我不推荐使用它。。。