2015-12-17 86 views
3

我需要遍歷註冊表並獲取所有子項和所有值。循環註冊表並獲取所有子項和C#中的RegistryKey中的值

這這是我一直想(只得到所有子項):

public void OutputRegKey(RegistryKey Key) 
{ 
    foreach (string keyname in Key.GetSubKeyNames()) 
    { 
     try 
     { 
      using (RegistryKey key2 = Key.OpenSubKey(keyname)) 
      { 
       foreach (string valuename in Key.GetValueNames()) 
       { 
        comboBox1.Items.Add(valuename); 
        OutputRegKey(key2); 
       } 
      } 
     } 
     catch 
     { 

     } 
    } 
} 

我如何獲得所有的值?我需要做兩個方法:一個獲得所有的子鍵,另一個獲取所有的值。我只是要求那個人得到所有的價值。謝謝。注:這不是作業或其他與學術相關的內容。這是個人的事。一旦給出了RegistryKey

回答

4

,你可以很容易地拿到鑰匙的ValueNames通過Key.GetValueNames()Key.GetValue(valueName)這將returnobject讓每一個單獨的按鍵的Value每個ValueName的。

借用你的代碼來闡述,這裏是應該如何修改,

private void processValueNames(RegistryKey Key) { //function to process the valueNames for a given key 
    string[] valuenames = Key.GetValueNames(); 
    if (valuenames == null || valuenames.Length <= 0) //has no values 
     return; 
    foreach (string valuename in valuenames) { 
     object obj = Key.GetValue(valuename); 
     if (obj != null) 
      comboBox1.Items.Add(Key.Name + " " + valuename + " " + obj.ToString()); //assuming the output to be in comboBox1 in string type 
    } 
} 

public void OutputRegKey(RegistryKey Key) { 
    try { 
     string[] subkeynames = Key.GetSubKeyNames(); //means deeper folder 
     if (subkeynames == null || subkeynames.Length <= 0) { //has no more subkey, process 
      processValueNames(Key); 
      return; 
     } 
     foreach (string keyname in subkeynames) { //has subkeys, go deeper 
      using (RegistryKey key2 = Key.OpenSubKey(keyname)) 
       OutputRegKey(key2); 
     } 
     processValueNames(Key); 
    } catch (Exception e) { 
     //error, do something 
    } 
} 
+0

很不錯,但代碼中有一個錯誤:在「OutputRegKey」的「趕上(例外五)」必須趕「使用(RegistryKey ...」),否則「foreach(...)」退出,遞歸不完整! – boboes

相關問題