你的代码是相当奇怪的。你运行一个for
循环,变量为i
,但是不要在循环内引用该变量。那肯定是一个错误。假设你想读一个关键值,你会写这样的:
foreach (string name in key.GetValueNames())
{
string value = key.GetValue(name).ToString();
ListViewItem item = new ListViewItem(new string[] { name, value });
listView1.Items.Add(item);
}
另外要注意的是注册表重定向。如果您的进程是32位,那么您的代码将从注册表的32位视图读取。当你在注册表中查看注册表时,这会混淆你。使用RegistryView
枚举可以同时访问32位和64位视图。
所以,在64位计算机上,列举32位和64位的看法,供HKLM,你需要把它写这样的:
private void AddValuesToList(RegistryKey key)
{
foreach (string name in key.GetValueNames())
{
string value = key.GetValue(name).ToString();
ListViewItem item = new ListViewItem(new string[] { name, value });
listView1.Items.Add(item);
}
}
,你会叫这样的:
const string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run";
AddValuesToList(Registry.CurrentUser.OpenSubKey(keyName));
AddValuesToList(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
RegistryView.Registry32).OpenSubKey(keyName));
AddValuesToList(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
RegistryView.Registry64).OpenSubKey(keyName));
一旦你知道如何处理这些值,很容易支持子密钥。请致电key.GetSubKeyNames()
以获取它们。
什么不行? – 2014-10-28 12:22:09
添加key.GetSubKeyNames()和key.GetValueNames()listview。 – Gabee8 2014-10-28 12:29:25