我想开发一个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'是个坏主意。捕获抛出的特定异常类型。 –