모든 애플리케이션과 마찬가지로 WMI는 Windows 운영 체제에서 오류 코드를 받습니다.
오류 코드가 표시되면 다음과 같은 옵션이 있습니다.
이벤트 로그를 확인합니다.
WMI는 오류의 원인을 확인하는 데 도움이 되도록 이벤트 로그를 확인하는 오류 메시지를 이벤트 로그 서비스로 보냅니다. 이벤트 로그 공급자가 지원하는 클래스를 사용하여 이벤트 로그에 프로그래밍 방식으로 액세스할 수 있습니다.
오류 코드를 정상적으로 검색합니다.
WMI는 C++의 COM 오류 코드, Err Object(VBScript)같은 네이티브 오류 개체, 그리고 공급자가 오류 정보를 제공하는 경우의 SWbemLastError와 같은 표준 기술을 지원하여 오류 코드를 검색합니다.
자세한 내용은 클래스 및 인스턴스 정보 조작 참조하세요.
이 항목에서는 다음 섹션에 대해 설명합니다.
- VBScript 사용하여 오류 처리
- C++ 사용하여 오류 처리
VBScript를 사용하여 오류 처리
WMI용 스크립팅 API를 통해 WMI를 호출하면 오류가 발생하는 경우 다음 옵션으로 오류 정보에 액세스할 수 있습니다.
- 예를 들어 VBScript에서는 스크립팅 언어의 네이티브 오류 메커니즘을 사용하여 오류 처리를 지원하기 위해 VBScript(Err Object) 사용합니다.
- SWbemLastError 개체를 만들어 오류 보고서를 가져옵니다.
다음 스크립트는 네이티브 Err 개체(VBScript)사용하는 방법을 보여 줍니다. 프로세스 핸들에 잘못된 값이 지정되면 오류가 생성됩니다.
On Error Resume Next
Set objProcess = GetObject( _
"winmgmts:root\cimv2:Win32_Process.Handle='one'")
Wscript.Echo Err.Number
메모
VBScript의 Err Object()의 Description 속성은 "winmgmts:" 모니커를 통해 WMI에 연결할 때 비어 있습니다. 그러나 SWbemLocator을 사용해 연결하면 설명을 볼 수 있습니다.
다음 표에서는 Err 개체(VBScript)속성을 나열합니다.
재산 | 포함 |
---|---|
설명 |
오류에 대한 지역화된 사람이 읽을 수 있는 설명입니다. |
번호 |
HRESULT WMI용 스크립팅 API에서 반환됩니다. |
원본 |
오류를 발생시킨 개체를 식별합니다. |
다음 스크립트는 SWbemLastError 개체를 사용하여 자세한 오류 정보를 가져오는 방법을 보여 드립니다. 모든 공급자가 SWbemLastError정보를 제공하는 것은 아닙니다. 스크립트의 오류 코드에 대한 자세한 내용은 WbemErrorEnum참조하세요.
On Error Resume Next
Set obj = GetObject("winmgmts:root\cimv2:Win32_Process.Handle='one'")
Set LastError = createobject("wbemscripting.swbemlasterror")
Wscript.Echo "Operation = " & LastError.operation & VBCRLF & "ParameterInfo = " _
& LastError.ParameterInfo & VBCRLF & "ProviderName = " & LastError.ProviderName
C++를 사용하여 오류 처리
WMI 클라이언트 애플리케이션은 COM 관련 오류 또는 WMI 관련 오류를 받을 수 있습니다. COM 오류는 COM 오류 코드의 구조를 준수합니다. 모든 WMI 인터페이스는 IWbemContext, IWbemClassObject및 IWbemQualifierSet 인터페이스를 제외한 COM 관련 오류를 반환할 수 있습니다. COM 오류 코드에 대한 자세한 내용은 오류 처리참조하세요. WMI 인터페이스의 참조 페이지에는 오류 코드 섹션에 적절한 WMI 오류 코드가 나열되어 있습니다.
클라이언트 애플리케이션은 상태 및 오류 반환 코드를 확인하기 위해 COM 표준을 따라야 합니다. 선택해야 하는 주요 차이점은 동기, 반동기 또는 비동기 호출에서 오류 코드를 검색할지 여부입니다.
C++ 사용하여 동기 및 반동기 오류 메시지에 액세스하려면
GetErrorInfo COM 함수를 호출하여 오류 정보를 검색합니다.
인터페이스 메서드가 오류를 나타내는 즉시 GetErrorInfo 호출해야 합니다. 여기에는 반동기식 프로세스를 처리하는 동안 호출하는 IWbemCallResult 메서드가 포함됩니다.
IErrorInterface::QueryInterface 메서드를 호출하여 반환된 COM 오류 개체를 검사합니다.
QueryInterface 호출에서 riid 매개 변수에 대한 IID_WbemClassObject 지정해야 합니다. QueryInterface 메서드는 일반적으로 __ExtendedStatusWMI 클래스의 인스턴스를 반환합니다.
비동기 호출이 발생한 시기 또는 스레드를 알 수 있는 방법이 없기 때문에 WMI는 비동기 호출에 대한 GetErrorInfo 통해 오류 개체를 전달하지 않습니다. 따라서 코드는 특정 오류만 처리하거나 COM을 통해 호출 실패를 전달할 수 있습니다.
메모
싱크에 대한 콜백은 클라이언트가 요구하는 것과 동일한 인증 수준에서 반환되지 않을 수 있으므로 비동기 통신 대신 반동기를 사용하는 것이 좋습니다. 자세한 내용은 메서드호출을 참조하세요.
C++ 사용하여 비동기 오류 메시지에 액세스하려면
IWbemObjectSink::SetStatus구현에서 COM 오류 개체를 검색합니다.
다음 의사 코드는 클라이언트 애플리케이션에 대한 일반적인 오류 처리 구현을 보여 줍니다.
HRESULT hRes = SomeMethod; // Check for specific error and status codes. if (hRes == WBEM_E_NOT_FOUND) { // Processing to handle specific error code } else if hRes == WBEM_S_DUPLICATE_OBJECTS { // All other cases, including errors specific to COM } else if (FAILED(hRes)) { }