2012-07-30 154 views
0

我有一個代碼,它在特定鍵路徑中搜索註冊表鍵值。 在註冊表項中SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318} 在註冊表項的末尾找到與0000 , 0001 , 0002 , 0003等等的所有密鑰。 {4D36E972-E325-11CE-BFC1-08002BE10318}。在每個密鑰(例如0007)中都有子網掩碼NetCfgInstanceId,其中包含網絡接口卡ID值,如{C80949A4-CEDA-4F29-BFE2-059856D7F745}。如果找到值,方法返回鍵路徑! 問題是查找註冊表鍵值並返回註冊表鍵值路徑

foreach (string key_value in key.GetValue("NetCfgInstanceId").ToString()) 

全部代碼中的錯誤Cannot convert type 'char' to 'string'

public string key_path(RegistryKey root, string root_path, string search_key) 
{ 
    string path = string.Empty; 
    foreach (string keyname in root.GetSubKeyNames()) 
    { 
     try 
     { 
      using (RegistryKey key = root.OpenSubKey(keyname, true)) 
      { 

       foreach (string key_value in key.GetValue("NetCfgInstanceId").ToString()) 
       { 
        if (key_value == search_key) 
        { 
         string reg_path = (string)key.GetValue("NetCfgInstanceId"); 
         path = reg_path; 
        } 
        else 
        { 
         path = "Can't find key !"; 
        } 
       } 
      } 
     } 
     catch (System.Security.SecurityException) 
     { 
      //Do nothing !!! 
     } 
    } 
    return path; 
} 

private void kryptonButton4_Click(object sender, EventArgs e) 
{ 
    var answer = key_path(Registry.LocalMachine, @"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}", "{C80949A4-CEDA-4F29-BFE2-059856D7F745}"); 
    MessageBox.Show(answer); 
}  

如何才能解決這個問題呢?

回答

1

Foreach需要一個枚舉值。您正在使用字符串作爲該值,因此編譯器需要在foreach中使用字符變量。換句話說,您對GetValue(...)。ToString()的調用不會返回一個字符串數組,它會返回一個字符串。 foreach(var string in stringval),var是一個char。

考慮這樣的事情,而不是...

var kind = key.GetValueKind("NetCfgInstanceId"); 
if (kind == RegistryValueKind.MultiString) 
{ 
    foreach (var key_value in (string[])key.GetValue("NetCfgInstanceId")) 
    { 
     if (key_value == search_key) 
     { 
      string reg_path = (string)key.GetValue("NetCfgInstanceId"); 
      path = reg_path; 
     } 
     else 
     { 
      path = "Can't find key !"; 
     } 
    } 
} 

這是假設你期待在REG鍵多串。如果它可以是單個字符串,則可以使用以下內容...

if (kind == RegistryValueKind.ExpandString 
    || kind == RegistryValueKind.String) 
{ 
    var key_value = (string)key.GetValue("NetCfgInstanceId"); 
    if (key_value == search_key) 
    { 
     path = key_value; 
    } 
    else 
    { 
     path = "Can't find key !"; 
    } 
} 
+0

您可以使用此編寫完整的代碼嗎?我不明白的東西。 :( – user1562839 2012-07-30 19:00:45

+0

我得到錯誤var key_value = key.GetValue(「NetCfgInstanceId」); ///鍵找不到 – user1562839 2012-07-30 19:35:39

+0

我找到解決方案..!千萬不要照顧這個! – user1562839 2012-07-30 19:55:14