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
有人能帮我一下吗?
这段代码是一个从特定键
检索子键+值的示例 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>>();
}
}