다음을 통해 공유


오류 코드 검색

모든 애플리케이션과 마찬가지로 WMI는 Windows 운영 체제에서 오류 코드를 받습니다.

오류 코드가 표시되면 다음과 같은 옵션이 있습니다.

  • 이벤트 로그를 확인합니다.

    WMI는 오류의 원인을 확인하는 데 도움이 되도록 이벤트 로그를 확인하는 오류 메시지를 이벤트 로그 서비스로 보냅니다. 이벤트 로그 공급자가 지원하는 클래스를 사용하여 이벤트 로그에 프로그래밍 방식으로 액세스할 수 있습니다.

  • 오류 코드를 정상적으로 검색합니다.

    WMI는 C++의 COM 오류 코드, Err Object(VBScript)같은 네이티브 오류 개체, 그리고 공급자가 오류 정보를 제공하는 경우의 SWbemLastError와 같은 표준 기술을 지원하여 오류 코드를 검색합니다.

자세한 내용은 클래스 및 인스턴스 정보 조작 참조하세요.

이 항목에서는 다음 섹션에 대해 설명합니다.

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, IWbemClassObjectIWbemQualifierSet 인터페이스를 제외한 COM 관련 오류를 반환할 수 있습니다. COM 오류 코드에 대한 자세한 내용은 오류 처리참조하세요. WMI 인터페이스의 참조 페이지에는 오류 코드 섹션에 적절한 WMI 오류 코드가 나열되어 있습니다.

클라이언트 애플리케이션은 상태 및 오류 반환 코드를 확인하기 위해 COM 표준을 따라야 합니다. 선택해야 하는 주요 차이점은 동기, 반동기 또는 비동기 호출에서 오류 코드를 검색할지 여부입니다.

C++ 사용하여 동기 및 반동기 오류 메시지에 액세스하려면

  1. GetErrorInfo COM 함수를 호출하여 오류 정보를 검색합니다.

    인터페이스 메서드가 오류를 나타내는 즉시 GetErrorInfo 호출해야 합니다. 여기에는 반동기식 프로세스를 처리하는 동안 호출하는 IWbemCallResult 메서드가 포함됩니다.

  2. 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))
    {
    
    }