Hyper-V RequestStateChange返回未记录的值

时间:2012-10-04 19:45:57

标签: c# hyper-v

我正在尝试使用C#的System.Management API以编程方式启动Hyper-V 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?!?");
}

我不知道我在这里做错了什么,或者为什么我得到这个无证件的返回值。

2 个答案:

答案 0 :(得分:1)

我建议您阅读下面的链接,因为我在尝试从c#启动hyper-v时发现这有很大的帮助

http://msdn.microsoft.com/en-us/library/cc723874(v=vs.85).aspx

答案 1 :(得分:0)

这个问题有点陈旧,但我遇到了同样的问题并找到了解决方案。

作为参考,MSDN中WMIv1的文章命名为cc______,而WMIv2的文章命名为hh______

WMIv1 WMIv2

这个错误的原因是因为我通过代码创建了我的VM,默认情况下,Msvm_ComputerSystem对AvailableRequestedStates有一个空值。随后,当调用RequestStateChange时,它返回一个未记录的1。

要解决此问题,请在调用RequestStateChange之前使用所有可用状态填充Msvm_ComputerSystem:

console.log("'"+files.join("', '")+"'");