GetMultiStringValue для чтения REG_MULTI_SEZ возвращает код ошибки 2 - PullRequest
2 голосов
/ 30 января 2010

Я пытаюсь использовать 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

1 Ответ

1 голос
/ 31 января 2010

Вы правы, это в конечном итоге очень очевидно. Ключ реестра, который я искал, отсутствовал на удаленной машине. Обнаружил, что позже в тот же день .. В любом случае спасибо за обновление.

На самом деле код ошибки 2 означает, что объект не найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...