2012-10-04 2 views
0

C#의 System.Management API를 사용하여 프로그래밍 방식으로 Hyper-V VM을 시작하려고합니다. VM을 시작하고 구성하는 데 큰 성공을 거두었지만 VM을 시작하는 것은 어렵습니다.Hyper-V RequestStateChange가 문서화되지 않은 값을 반환합니다.

ManagementObject compSys = WMIHelpers.GetMsvm_ComputerSystem(scope, vmName); 

VM의 상태가 (주장) "RequestStateChange"내가이 매개 변수 개체를 얻을 수 있어요 변경하는 방법

은 내가 WQL 쿼리를 수행하는 도우미 메서드를 사용하여 Msvm_ComputerSystem 객체를 가져 그들을 설정 :

ManagementBaseObject result = vsServ.InvokeMethod("RequestStateChange", callParams, null); 

if(result["ReturnValue"] == 1) 
{ 
    System.Console.WriteLine("WTF?!?"); 
} 
:

ManagementBaseObject callParams = compSys.GetMethodParameters("RequestStateChange"); 
callParams["RequestedState"] = WMIHelpers.RequestedState.Enabled; 

을 그러나 나는 방법을 호출 할 때, 내 반환 값은 문서화되고,

나는 여기서 무엇을 잘못하고 있는지, 왜 문서화되지 않은 반환 값을 얻었는지 알지 못합니다.

답변

0

이 질문은 조금 오래 된 c에서 Hyper-V를 시작하려고 할 때 나는 큰 도움이 발견으로 아래의 링크를 읽는 것이 좋습니다,하지만 난 같은 문제를 쳤고 해결책을 찾았습니다. WMIv2이

WMIv1 WMIv2

은이 오류가 나에게 와서 이유 내가 코드를하여 내 VM을 생성하기 때문이다

을 hh______ 명명에 대한

는 참고로, WMIv1에 대한 MSDN의 기사 cc______ 이름을 지정하고있다 기본 Msvm_ComputerSystem에는 AvailableRequestedStates에 대한 null 값이 있습니다. 이후 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); 
관련 문제