Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Msvm_ImageManagementService WMI 객체를 사용할 때 오류 상황 정리

VHD/VHDX 제어 관련해서 인터넷 검색을 해보면 Msvm_ImageManagementService WMI 객체를 사용하는 예제가 많이 나옵니다. 실제로 다음과 같이 코딩을 하게 되는데요.

ManagementScope scope = new ManagementScope(@"root\virtualization", null);

using (ManagementObject imageService = Utility.GetServiceObject(scope, "Msvm_ImageManagementService"))
{
    // ... VHD/VHDX 제어
}

이를 실행해 보면 환경에 따라 다음과 같은 예외가 발생할 수 있습니다.

System.Management.ManagementException: Not found
   at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
   at System.Management.ManagementObject.Initialize(Boolean getObject)
   at System.Management.ManagementBaseObject.get_ClassName()
   at System.Management.ManagementClass.GetInstances(EnumerationOptions options)
   at System.Management.ManagementClass.GetInstances()
...[생략]...

이유는 다음의 글에 나온 데로,

Error 'Get-WmiObject : Invalid class “Msvm_ImageManagementService”'
; http://stackoverflow.com/questions/19201375/error-get-wmiobject-invalid-class-msvm-imagemanagementservice

Windows 8.1부터 네임스페이스가 변경되었기 때문입니다.

The v2 WMI namespace in Hyper-V on Windows 8
; https://docs.microsoft.com/en-us/archive/blogs/virtual_pc_guy/the-v2-wmi-namespace-in-hyper-v-on-windows-8

따라서, 다음과 같이 Scope을 변경해야 합니다.

ManagementScope scope = new ManagementScope(@"root\virtualization\v2", null);

using (ManagementObject imageService = Utility.GetServiceObject(scope, "Msvm_ImageManagementService"))
{
    // ... VHD/VHDX 제어
}




그런데, 이렇게 변경했는데도 예외가 발생할 수 있습니다.

System.Management.ManagementException: This method is not implemented in any class
   at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
   at System.Management.ManagementObject.GetMethodParameters(String methodName, ManagementBaseObject& inParameters, IWbemClassObjectFreeThreaded& inParametersClass, IWbemClassObjectFreeThreaded& outParametersClass)
   at System.Management.ManagementObject.GetMethodParameters(String methodName)
...[생략]...

이유는, v2로 네임스페이스만 변경된 것 뿐만 아니라 메서드의 구현까지 모두 변경되었기 때문입니다. 따라서, v2에 대한 문서를 보고 구현을 해야 합니다.

Msvm_ImageManagementService class
; https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/msvm-imagemanagementservice

CreateVirtualHardDisk method of the Msvm_ImageManagementService class
; https://docs.microsoft.com/en-us/windows/win32/hyperv_v2/createvirtualharddisk-msvm-imagemanagementservice

이제부터 잘 동작할 것입니다. ^^




그런데, 몇몇 컴퓨터에서 그래도 다음과 같은 예외가 발생할 수 있습니다.

System.Management.ManagementException: Invalid namespace
   at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
   at System.Management.ManagementScope.InitializeGuts(Object o)
   at System.Management.ManagementScope.Initialize()
   at System.Management.ManagementScope.Connect()
...[생략]...

환경은 Hyper-V가 설치되지 않은 Windows 10이었기 때문입니다. "root\virtualization\v2" 계열의 WMI 객체들에 대한 MSDN 문서를 보면 "Minimum supported client"로 "Windows?8 [desktop apps only]"라고만 되어 있지만 기본적으로 Hyper-V가 설치되어 있어야만 하는 것입니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/13/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2017-05-04 01시29분
Windows-classic-samples / Samples / Hyper-V / Storage / cs
; https://github.com/Microsoft/Windows-classic-samples/tree/master/Samples/Hyper-V/Storage/cs
정성태

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13982정성태8/2/2025221개발 환경 구성: 753. CentOS 7 컨테이너 내에서 openssh 서버 호스팅
13981정성태8/1/2025281오류 유형: 971. CentOS 7에서 yum 사용 시 "Could not resolve host: mirrorlist.centos.org; Unknown error"
13980정성태7/31/2025342Linux: 119. eBPF - BPF_PROG_TYPE_CGROUP_SOCK 유형에서 정상 동작하지 않는 BPF_CORE_READ (2)
13979정성태7/30/2025353Linux: 118. eBPF - BPF_PROG_TYPE_CGROUP_SOCK 유형에서 정상 동작하지 않는 BPF_CORE_READ
13978정성태7/29/2025442오류 유형: 970. 파일 복사 시 "Data error (cyclic redundancy check). (0x80070017)" 에러
13977정성태7/28/2025589닷넷: 2349. C# 14 - (5) 문자열 리터럴을 utf-8 인코딩으로 저장파일 다운로드1
13976정성태7/25/2025856닷넷: 2348. C# - 카카오 카나나 모델 + Microsoft.ML.OnnxRuntimeGenAI 예제파일 다운로드1
13975정성태7/23/2025986닷넷: 2347. C# 14 - (4) 형식 인자가 없는 제네릭 타입의 nameof 지원파일 다운로드1
13974정성태7/22/20251362닷넷: 2346. C# 14 - (3) Span 타입과 배열 간의 암시적 형변환파일 다운로드1
13973정성태7/21/20251241닷넷: 2345. C# - 배열 및 Span의 공변성파일 다운로드1
13972정성태7/21/20251401닷넷: 2344. C#의 Identity conversion 의미파일 다운로드1
13971정성태7/17/20251453닷넷: 2343. C# 14 - (2) 속성 구문에서 문맥 키워드로 추가되는 field 예약어파일 다운로드1
13970정성태7/17/20251390닷넷: 2342. C# 14 - (1) (예약)
13969정성태7/17/20251442닷넷: 2341. snap으로 설치한 .NET 리눅스 실행 환경
13968정성태7/16/20251327오류 유형: 969. lddtree - TypeError: 'type' object is not subscriptable
13967정성태7/16/20251854오류 유형: 968. snap으로 설치한 "dotnet run" 실행 시 "undefined symbol: _dl_audit_symbind_alt, version GLIBC_PRIVATE" 오류
13966정성태7/15/20252399디버깅 기술: 223. WinDbg - .kframes 명령어
13965정성태7/11/20251680오류 유형: 967. 디버깅 모드로 실행 시 "Could not find file 'C:\Program Files\IIS Express\Oracle.DataAccess.Common.Configuration.Section.xsd'" 예외
13964정성태7/10/20252354닷넷: 2340. C# - Win32 Multimedia Timer 주기파일 다운로드1
13963정성태7/8/20251896VS.NET IDE: 202. Visual Studio 2022 + Copilot 기본 사용법
13962정성태7/7/20251911스크립트: 79. 파이썬 - onnxruntime_genai에서 지원하지 않는 모델 사용
13961정성태7/5/20251632디버깅 기술: 222. WinDbg 분석 사례 - IISreset 시점에 w3wp.exe의 crash 발생
13960정성태7/3/20252804개발 환경 구성: 752. ProcDump - C/C++ 예외 코드 필터를 지정한 덤프 생성 [2]
13959정성태6/25/20251820오류 유형: 966. Ubuntu - ping: connect: Network is unreachable
13958정성태6/21/20252499닷넷: 2339. C# - Phi-4-multimodal 모델의 GPU 가속 방법 (ORT 사용)파일 다운로드1
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...