Я пытаюсь использовать GetMultiStringValue для чтения REG_MULTI_SEZ из удаленного реестра.
Эта функция всегда возвращает код ошибки 2. И массив, который она должна заполнить REG_MULTI_SEZ, равен нулю. Я борюсь с этим с утра безуспешно.
Вот пример кода, который я использую для чтения REG_MULTI_SEZ в C #.
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 и в итоге получил тот же результат. Ирония в том, что я взял этот кусок VBS из MSDN. Даже этот скрипт завершается ошибкой с тем же кодом ошибки (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