你的代碼是相當奇怪的。你運行一個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