c#获取注册表子键的值

本文关键字:获取 注册表 | 更新日期: 2023-09-27 17:49:27

我在注册表中也有类似的设置:

HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows'CurrentVersion'MyKeys'Keys1
  > random subkey 1 / value a = 1
  > random subkey 2 / value b = 2
  > random subkey 3 / value c = 3
  > random subkey 4 / value d = 4

随机子密钥x -随机数(例如{6E7EE186-9G13-50HC-A001-319DA68183A7})

现在我想保存所有的子键名称到string[],然后将每个值添加到listView:

a | 1
b | 2
c | 3
d | 4
有人能帮我一下吗?

c#获取注册表子键的值

这段代码是一个从特定键

检索子键+值的示例
    class Key
    {
        public string KeyName { get; set; }
        public List<KeyValuePair<string, object>> Values { get; set; }
    }
    private List<Key> GetSubkeysValue(string path, RegistryHive hive)
    {
        var result = new List<Key>();
        using (var hiveKey = RegistryKey.OpenBaseKey(hive, RegistryView.Default))
        using (var key = hiveKey.OpenSubKey(path))
        {
            var subkeys = key.GetSubKeyNames();
            foreach (var subkey in subkeys)
            {
                var values = GetKeyValue(hiveKey, subkey);
                result.Add(values);
            }
        }
        return result;
    }
    private Key GetKeyValue(RegistryKey hive, string keyName)
    {
        var result = new Key() {KeyName = keyName};
        using (var key = hive.OpenSubKey(keyName))
        {
            foreach (var valueName in key.GetValueNames())
            {
                var val = key.GetValue(valueName);
                var pair = new KeyValuePair<string, object>(valueName, val);
                result.Values.Add(pair);
            }
        }
        return result;
    }

调用GetKeyValue与您的根路径(SOFTWARE'Microsoft'Windows'CurrentVersion'MyKeys' keyys1在您的问题)本地机器hive

指出

:

在某些情况下,OpenSubKey返回null,在我的例子中,这些情况会抛出NullRefrenceException =>你应该决定当OpenSubKey返回null时会发生什么

您的路径在local_machine - software中,请确保您使用的是正确的RegistryView

接受的答案对我不起作用,我不得不做一些修改。

public class RegistryFuncs
{
    public static List<Key> GetSubkeysValue(string path, RegistryHive hive)
    {
        var result = new List<Key>();
        using (var hiveKey = RegistryKey.OpenBaseKey(hive, RegistryView.Default))
        using (var key = hiveKey.OpenSubKey(path))
        {
            var subkeys = key.GetSubKeyNames();
            foreach (var subkey in subkeys)
            {
                var values = GetKeyValue(hiveKey, path, subkey);
                result.Add(values);
            }
        }
        return result;
    }
    public static Key GetKeyValue(RegistryKey hive, string path, string keyName)
    {
        var result = new Key() { KeyName = keyName };
        var subkey = $@"{path}'{keyName}";
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(subkey))
        {
            if (key == null) return null;
            foreach (var valueName in key.GetValueNames())
            {
                var val = key.GetValue(valueName);
                var pair = new KeyValuePair<string, object>(valueName, val);
                result.Values.Add(pair);
            }
        }
        return result;
    }
}
public class Key
{
    public string KeyName { get; set; }
    public List<KeyValuePair<string, object>> Values { get; set; }
    public Key()
    {
        Values = new List<KeyValuePair<string, object>>();
    }
}