我想開發一個C#程序來將整個LocalMachine樹打印到控制檯。到目前爲止,我已經能夠獲得HKEY_LOCAL_MACHINE的子鍵,但沒有比這更深。我相對確定我需要在這裏使用某種遞歸來獲取子鍵及其子鍵的所有內容,等等。我只是不確定如何去做。這是我現在得到的:打印LocalMachine的整個樹內容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
namespace PrintLocalMachine
{
class PrintLocalMachine
{
static void Main(string[] args)
{
Console.Out.WriteLine(Registry.LocalMachine.Name);
string[] subkeynames = Registry.LocalMachine.GetSubKeyNames();
foreach (string subkey in subkeynames)
{
try
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey(subkey);
Console.Out.WriteLine(rk.Name);
string[] subkeynames2 = rk.GetSubKeyNames();
foreach (string s in subkeynames2)
{
recurse(s, rk);
}
}
catch (Exception e) { }
}
}
private static void recurse(string sub, RegistryKey rk)
{
RegistryKey rk2 = Registry.LocalMachine.OpenSubKey(sub);
Console.Out.WriteLine(rk2.Name);
string[] subkeynames3 = rk.GetSubKeyNames();
foreach(string s2 in subkeynames3){
recurse(s2, rk2);
}
}
}
}
有人可以解釋我應該怎麼做呢?我只是需要指出正確的方向,我只是用這個打了一堵牆。
編輯:我改變了一下,並更新了代碼;更新的代碼掛在HKEY_CURRENT_MACHINE \ SAM上,只是一遍又一遍地打印它,直到StackOverflowException
爲什麼不能進入註冊表編輯器,單擊HKEY_LOCAL_MACHINE,轉到文件,然後單擊導出? '.reg'文件只是文本文件,你可能需要拿出那個文件中的內容並改爲使用它。基本上,不要重新發明輪子。 – qJake
應該添加了作業標籤抱歉,這是一個課程作業。我需要通過C#程序來做到這一點。 –
除非你重新拋出,否則趕上'Exception e'是個壞主意。捕獲拋出的特定異常類型。 –