场景:我们不关心性能。我们有一个需要在注册表中检查的值数组。//这些值前面可以有任何东西。我们需要改变这一点。
现在,我不觉得它迭代了所有的值,就像它跳过了一些,最后变成了 null 并崩溃了。
这是一个控制台程序,主要看起来像这样:
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 此外,它不会显示带有键内所有值的消息框,就像它只是随机挑选出来一样。