[英]Hyper-V RequestStateChange returns undocumented value
我正在嘗試使用C#的System.Management API以編程方式啟動Hyper-V VM。 我在創建和配置VM方面取得了很大的成功,但是事實證明啟動VM並不容易。
我得到一個Msvm_ComputerSystem對象,使用一個輔助方法來執行WQL查詢:
ManagementObject compSys = WMIHelpers.GetMsvm_ComputerSystem(scope, vmName);
更改VM狀態的方法是(據說)“ RequestStateChange”,我能夠獲取參數對象並進行設置:
ManagementBaseObject callParams = compSys.GetMethodParameters("RequestStateChange");
callParams["RequestedState"] = WMIHelpers.RequestedState.Enabled;
但是,當我調用該方法時,我的返回值為1,這是未記錄的:
ManagementBaseObject result = vsServ.InvokeMethod("RequestStateChange", callParams, null);
if(result["ReturnValue"] == 1)
{
System.Console.WriteLine("WTF?!?");
}
我不知道我在這里做錯了什么,或者為什么我得到了這個未記錄的返回值。
我建議閱讀下面的鏈接,因為我在嘗試從C#啟動Hyper-V時發現了很大的幫助
http://msdn.microsoft.com/zh-CN/library/cc723874(v=vs.85).aspx
這個問題有點老了,但我遇到了同樣的問題並找到了解決方案。
作為參考,在MSDN中將WMIv1的文章命名為cc______,將WMIv2的文章命名為hh______
出現此錯誤的原因是因為我通過代碼創建了我的VM,並且默認情況下Msvm_ComputerSystem的AvailableRequestedStates值為空。 隨后,在調用RequestStateChange時,它將返回1(未記錄)。
要解決此問題,請在調用RequestStateChange之前,用所有可用狀態填充Msvm_ComputerSystem:
UInt16[] availableRequestedStates = { 2, 3, 4, 6, 7, 8, 9, 10, 11 };
compSystem["AvailableRequestedStates"] = availableRequestedStates;
compSystem.Put();
ManagementBaseObject inParams = compSystem.GetMethodParameters("RequestStateChange");
inParams["RequestedState"] = 2;
ManagementBaseObject result = compSystem.InvokeMethod("RequestStateChange", inParams, null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.