簡體   English   中英

Hyper-V RequestStateChange返回未記錄的值

[英]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______

WMIv1 WMIv2

出現此錯誤的原因是因為我通過代碼創建了我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM