sou*_*zer 4 c# registry recursion
我需要遍历注册表并获取所有子项和所有值。
这就是我一直在尝试的(仅获取所有子键):
public void OutputRegKey(RegistryKey Key)
{
foreach (string keyname in Key.GetSubKeyNames())
{
try
{
using (RegistryKey key2 = Key.OpenSubKey(keyname))
{
foreach (string valuename in Key.GetValueNames())
{
comboBox1.Items.Add(valuename);
OutputRegKey(key2);
}
}
}
catch
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我如何获得所有值?我需要做两种方法:一种获取所有子键,另一种获取所有值。我只是要求一个人获得所有的价值。谢谢你。
PS:这不是家庭作业或与学术有关的其他方面。这是个人的事情。
一旦给出了RegistryKey,你可以很容易地拿到钥匙的ValueNames通过Key.GetValueNames(),并获得每一个单独的按键的的Value每一个ValueName由Key.GetValue(valueName)该会return的object。
借用你的代码来详细说明,这里是它应该如何修改,
private void processValueNames(RegistryKey Key) { //function to process the valueNames for a given key
string[] valuenames = Key.GetValueNames();
if (valuenames == null || valuenames.Length <= 0) //has no values
return;
foreach (string valuename in valuenames) {
object obj = Key.GetValue(valuename);
if (obj != null)
comboBox1.Items.Add(Key.Name + " " + valuename + " " + obj.ToString()); //assuming the output to be in comboBox1 in string type
}
}
public void OutputRegKey(RegistryKey Key) {
try {
string[] subkeynames = Key.GetSubKeyNames(); //means deeper folder
if (subkeynames == null || subkeynames.Length <= 0) { //has no more subkey, process
processValueNames(Key);
return;
}
foreach (string keyname in subkeynames) { //has subkeys, go deeper
using (RegistryKey key2 = Key.OpenSubKey(keyname))
OutputRegKey(key2);
}
processValueNames(Key);
} catch (Exception e) {
//error, do something
}
}
Run Code Online (Sandbox Code Playgroud)