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
就像提示一樣,您可能會發現Microsoft.Win32註冊表類比WMI包裝更方便。請參閱RegistryKey類,特別是OpenRemoteBaseKey,OpenSubKey和GetValue方法。 – itowlson 2010-01-30 04:53:53
愚蠢我知道,但作爲錯誤代碼2意味着註冊表項不存在我假設你已經檢查它存在:) – tyranid 2010-01-30 09:19:15