2012-07-30 2 views
0

특정 키 경로에서 레지스트리 키 값을 검색하는 코드가 있습니다. 레지스트리 키 SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318} 레지스트리 키의 끝에 0000 , 0001 , 0002 , 0003 등의 키를 모두 찾습니다. {4D36E972-E325-11CE-BFC1-08002BE10318}. 각 키 (예 : 0007)에는 과 같이 네트워크 인터페이스 카드 ID 값을 보유하는 NetCfgInstanceId이라는 하위 키가 있습니다. 값을 찾으면 메소드는 키 경로를 반환합니다! 문제레지스트리 키 값을 찾고 레지스트리 키 값 경로를 반환하십시오.

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 (string x의 var x), 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 !"; 
     } 
    } 
} 

당신이 등록 키에서 다중 스트링을 기대하고 가정된다. 단일 문자열 일 수있는 경우 다음을 사용할 수 있습니다.

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

+0

오류가 발생했습니다. var key_value = key.GetValue ("NetCfgInstanceId"); /// 키가 발견되지 않았습니다. – user1562839

+0

해결책을 찾았습니다!이 문제를 해결하지 마십시오! – user1562839