C# 迭代注册表,查找值

C# 迭代注册表,查找值,c#,registry,iteration,C#,Registry,Iteration,情景: 我们不关心性能。 我们需要在注册表中检查一组值。 //这些值前面可以有任何内容。我们需要改变这一点 现在,我不觉得它会记录所有的值,就像它跳过了一些值,最后变成空值并崩溃 这是一个控制台程序,Main如下所示: static void Main(string[] args) { string[] FASKeyWords = new string[] { "DummyValue1", "DummyValue2" }; RegistryKey Bas

情景: 我们不关心性能。 我们需要在注册表中检查一组值。 //这些值前面可以有任何内容。我们需要改变这一点

现在,我不觉得它会记录所有的值,就像它跳过了一些值,最后变成空值并崩溃

这是一个控制台程序,Main如下所示:

static void Main(string[] args)
    {

        string[] FASKeyWords = new string[] { "DummyValue1", "DummyValue2" };
        RegistryKey BaseKey = Registry.LocalMachine;
        foreach (string FASKeyWord in FASKeyWords)
        {
            Console.WriteLine("Looking in " + BaseKey.Name);
            Console.WriteLine("Looking for : " + FASKeyWord);
            GetSubKeys(BaseKey, FASKeyWord);
        }
    }
现在,Main称之为Void

private static void GetSubKeys(RegistryKey SubKey,string KeyWord)
        {
            foreach (string valueName in SubKey.GetValueNames())
            {
                string Value = SubKey.GetValue(valueName).ToString();
//Check for any values at all.
                MessageBox.Show(valueName + " with data : " + Value);

                if (Value.Contains(KeyWord))
                    MessageBox.Show("Found '" + KeyWord + "' At " + SubKey.Name);
            }

            foreach (string Key in SubKey.GetSubKeyNames())
            {
                MessageBox.Show(SubKey.Name);
                GetSubKeys(SubKey.OpenSubKey(Key), KeyWord);
            }
        }
我在Registry类中的表现远远不是最好的,但据我所知,这应该没问题吧,我盲目地主演这部电影已经太久了,我想再配一双眼睛会很好:)

崩溃发生在:string Value=SubKey.GetValue(valueName.ToString(); 带有NullReferenceException 此外,它并没有显示一个包含键中所有值的messageBox,就像它只是随机挑选它们一样

对这个问题的直观观察。

来自:

GetValue不支持读取REG\ U NONE或REG\ U LINK类型的值。在这两种情况下,都会返回默认值(null),而不是实际值

你最好处理这种情况(如果,至少用一个简单的
):


如果您遇到错误,请发布消息和堆栈跟踪。很抱歉,我忘记了它实际产生的错误。然后您需要再次运行代码并捕获它。我只是在帖子底部添加了它,这还不够吗PIf只是,不幸的是,德沃兹也是如此,这应该是费塔奇式的,对吧我已经用一张图片更新了我的帖子,这张图片应该能显示视觉效果aspect@SimonLausten你能把原木放在桌子前面吗?要检查哪个值返回null?
object RawValue = SubKey.GetValue(valueName);
string Value = RawValue != null ? RawValue.ToString() : "";