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

标签 c# .net registry

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

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

谢谢,

阿萨夫

最佳答案

我不知道您可以通过内置的单个调用来执行此操作。但是,您不需要调用 OpenSubKey/GetValue 等。调用 CreateSubKey 将创建一个新 key ,或者打开现有 key (如果存在)。

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

忽略那里多余的 ',我需要它来使格式看起来正确。 ??

此外,请确保在添加注册表项时测试异常情况……有很多安全和路径方面的问题可能会出错。陷阱的异常(exception)列表是 here .


编辑
我把这件事想得太复杂了!我刚刚测试过...以下将完全按照您的要求执行:

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

它足够智能来解析嵌套路径。只需确保您有 @ 符号,否则它会将字符串视为已转义。

关于c# - 如何在 C# 中添加嵌套的注册表项/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206963/

相关文章:

c# - c#中的通用接口(interface)类型推断怪异

c# - 我应该如何序列化包含大量对象列表的对象?

c# - 使用 C# 为所有桌面快捷方式创建自定义右键单击上下文菜单项(Windows 资源管理器)

registry - 如何在 Windows CE 5.0 设备上添加注册表项?

c# - 如何获得小时之间的间隔并从开始到结束放入列表?

c# - '=' 运算符后缺少操作数

c# - 等价于 C# 中 VB6 的 WeekDay 函数

c# - 明确指定字符串转换中的区域性

c# - WebBrowser 打印设置

c# - 用所有已注册的文件类型(不仅仅是扩展名)填充 ComboBox 的最有效方法是什么