2012-12-06 3 views
2

시나리오 : 성능에 대해서는 신경 쓰지 않습니다. 우리는 레지스트리에서 확인해야하는 값의 배열을 가지고 있습니다. // 값에는 값이있을 수 있습니다. 우리는 이것을 바꿀 필요가있다.레지스트리 반복, 값 검색

지금 당장은 모든 값을 반복하는 것처럼 느껴지지 않습니다. 몇 개 건너 뛰고 결국 null이되고 충돌이 발생합니다. , 주요

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); 
      } 
     } 

내가 레지스트리 클래스와 함께 최고의 작업에서 멀리있어이 공허를 호출 이제

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); 
     } 
    } 

만에 :

홈페이지는 다음과 같습니다, 콘솔 프로그램입니다 내 지식이 괜찮을거야? , 나는 너무 오랫동안 그것을 맹목적으로 주연 해왔다. 나는 다른 눈의 쌍으로도 좋을 것이라고 생각했다. :)

크래시가 발생합니다. string Value = SubKey.GetValue (valueName) .ToString() ; 에 NullReferenceException이있는 경우 또한 키 내부에 모든 값이 포함 된 messageBox가 표시되지 않습니다. 임의로 선택하는 것과 같습니다.

문제의 시각적 표현. MSDN에서 http://peecee.dk/uploads/122012/Untitled2.png

+0

는 메시지 및 스택 추적을 게시하시기 바랍니다. –

+0

죄송합니다. 실제로 생성 된 오류는 잊어 버렸습니다. –

+0

그러면 코드를 다시 실행하여 캡처해야합니다. –

답변

2

:

GetValue 타입 REG_NONE 또는 REG_LINK의 판독 값을 지원하지 않습니다. 두 경우 모두 실제 값 대신 기본값 (null)이 반환됩니다.

당신은 더 나은 (적어도 간단한 if와) 그 상황을 처리하기 : 당신이 오류가 발생하는 경우

object RawValue = SubKey.GetValue(valueName); 
string Value = RawValue != null ? RawValue.ToString() : ""; 
+0

그 것이었다면 슬프게도 역시 DWORD에서도 발생합니다. - 시각적 인 모습을 보여줄 그림으로 내 게시물을 업데이트했습니다. –

+0

@ SimonLausten foreach 앞에 로그를 기록 할 수 있습니까? 어떤 값이 null을 반환하는지 확인하려면? –