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
팁처럼 Microsoft.Win32 레지스트리 클래스가 WMI 래퍼보다 더 편리 할 수 있습니다. RegistryKey 클래스, 특히 OpenRemoteBaseKey, OpenSubKey 및 GetValue 메소드를 참조하십시오. – itowlson
어리 석다 나는 알고있다. 그러나 에러 코드 2는 레지스트리 키가 존재하지 않는다는 것을 의미한다. 나는 당신이 그것을 체크했다고 가정한다. :) – tyranid