2010-01-30 2 views
2

GetMultiStringValue를 사용하여 원격 레지스트리에서 REG_MULTI_SEZ를 읽으려고합니다. 이 함수는 항상 오류 코드 2를 반환합니다. 그리고 REG_MULTI_SEZ로 채울 것으로 예상되는 배열은 null입니다. 나는 아무런 성공도없이 아침부터 이걸로 싸우고있다.GetMultiStringValue REG_MULTI_SEZ를 읽으면 errocode가 2를 반환합니다.

다음은 C#에서 REG_MULTI_SEZ를 읽는 데 사용하는 샘플 코드입니다.

ConnectionOptions connectionOptions = new ConnectionOptions(); 
      //connectionOptions.Impersonation = ImpersonationLevel.Impersonate; 
      //connectionOptions.EnablePrivileges = true; 
      connectionOptions.Username = domain +"\\" +userName; 
      connectionOptions.Password = password ; 

      ManagementScope managementScope = new ManagementScope("\\\\" + server + "\\root\\default", connectionOptions); 
      ManagementPath managementPath = new ManagementPath("StdRegProv"); 
      ManagementClass managementClass = new ManagementClass(managementScope, managementPath, null); // null should be connectionOptions ? 
      ManagementBaseObject inParams = managementClass.GetMethodParameters("GetMultiStringValue"); 
      inParams["hDefKey"] = HKEY_LOCAL_MACHINE; 
      inParams["sSubKeyName"] = key; 
      inParams["sValueName"] = valueName;     
      ManagementBaseObject outParams = managementClass.InvokeMethod("GetMultiStringValue", inParams, null); 
       if (Convert.ToUInt32(outParams["ReturnValue"]) == 0) 
       { 
        if (outParams["sValue"] != null) 
        { 
         Object objReturn = outParams["sValue"]; 
         if (objReturn is Array) 
         { 
          string[] multStr = (string[])objReturn; 
          return string.Join("|", multStr); 
         } 
        } 
       } 

나는 VBS와 동일한 결과를 얻으려고했지만 결과는 같았습니다. 아이러니 한 것은 MSDN에서이 VBS 조각을 가져 왔습니다. 이 스크립트도 동일한 오류 코드 (2)로 실패합니다.

const HKEY_LOCAL_MACHINE = &H80000002 
strComputer = "." 
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
strKeyPath = "SYSTEM\CurrentControlSet\Services\Eventlog\System" 
strValueName = "Sources" 
Returnval = objReg.GetMultiStringValue(HKEY_LOCAL_MACHINE,strKeyPath,strValueName,arrValues) 
If (Returnval = 0) And (Err.Number = 0) Then 
    For Each strValue In arrValues 
    WScript.Echo strValue 
Next 
Else 
    Wscript.Echo "GetMultiStringValue failed. Error = " & Err.Number 
Wscript.Echo "Return value " & Returnval 
End If 

아무도이 문제에 직면 한 경우 여기에서 내가 누락 된 부분을 지적 해주십시오.

감사 Moorthi

+0

팁처럼 Microsoft.Win32 레지스트리 클래스가 WMI 래퍼보다 더 편리 할 수 ​​있습니다. RegistryKey 클래스, 특히 OpenRemoteBaseKey, OpenSubKey 및 GetValue 메소드를 참조하십시오. – itowlson

+0

어리 석다 나는 알고있다. 그러나 에러 코드 2는 레지스트리 키가 존재하지 않는다는 것을 의미한다. 나는 당신이 그것을 체크했다고 가정한다. :) – tyranid

답변

1

당신은 매우 분명 끝이 정확합니다. 찾고 있던 레지스트리 키가 원격 시스템에 없습니다. 나중에 그날 발견 .. 어쨌든 업데이 트에 대한 감사.

실제로 오류 코드 2는 객체를 찾을 수 없음을 의미합니다.

관련 문제