2010-01-30 63 views
2

我想使用GetMultiStringValue從遠程註冊表讀取REG_MULTI_SEZ。 該函數總是返回錯誤碼2.並且它應該用REG_MULTI_SEZ填充的數組爲空。自從上午以來,我一直在與這場戰鬥取得成功。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 2010-01-30 04:53:53

+0

愚蠢我知道,但作爲錯誤代碼2意味着註冊表項不存在我假設你已經檢查它存在:) – tyranid 2010-01-30 09:19:15

回答

1

你是正確的它結束了非常明顯的。我正在查找的註冊表項在遠程計算機上不存在。發現那天晚些時候..無論如何感謝您的更新。

實際上錯誤代碼2意味着找不到對象。