Sdílet prostřednictvím


Načtení kódu chyby

Stejně jako u všech aplikací služba WMI obdrží kódy chyb z operačního systému Windows.

Když se zobrazí kód chyby, máte následující možnosti:

  • Prohlédněte si protokol událostí.

    Služba WMI odesílá chybové zprávy službě Protokolu událostí, která kontroluje protokoly událostí, aby pomohla určit příčinu chyby. Můžete použít třídy, které podporuje poskytovatel protokolu událostí , k programovému přístupu k protokolům událostí.

  • Načtěte kód chyby obvyklým způsobem.

    Rozhraní WMI podporuje standardní techniky pro získání kódů chyb, což jsou kódy chyb rozhraní COM pro C++ a nativní chybové objekty, jako je Err Object (VBScript)nebo SWbemLastError, pokud poskytovatel poskytuje informace o chybách.

Další informace naleznete v tématu , manipulace s informacemi o třídách a instancích,.

V tomto tématu jsou popsány následující části:

Zpracování chyby pomocí jazyka VBScript

Pokud volání rozhraní WMI prostřednictvím skriptovacího rozhraní API pro rozhraní WMI způsobí chybu, máte pro přístup k informacím o chybě následující možnosti:

  • Pro podporu zpracování chyb použijte nativní mechanismy chyb skriptovacího jazyka, například v jazyce VBScript, použijte objekt Err (VBScript).
  • Vytvořte objekt SWbemLastError, který zobrazí zprávu o chybě.

Následující skript ukazuje použití nativního objektu Err (VBScript). Pokud je zadána nesprávná hodnota popisovače procesu, vygeneruje se chyba.

On Error Resume Next
Set objProcess = GetObject( _
    "winmgmts:root\cimv2:Win32_Process.Handle='one'")
Wscript.Echo Err.Number

Poznámka

Vlastnost Descriptionobjektu Err (VBScript) je při připojování k rozhraní WMI prostřednictvím monikeru winmgmts:. Pokud se ale připojíte pomocí SWbemLocator, popis je k dispozici.

Následující tabulka uvádí vlastnosti objektuErr (VBScript).

Vlastnost Obsahuje
popis
Lokalizovaný popis chyby čitelný člověkem.
číslo
HRESULT vráceno rozhraním API pro skriptování pro WMI.
Zdroj
Identifikuje objekt, který vyvolal chybu.

Následující skript ukazuje použití objektu SWbemLastError k získání podrobných informací o chybě. Upozorňujeme, že ne všichni poskytovatelé dodávají informace do SWbemLastError. Další informace o kódech chyb ve skriptu naleznete v tématu 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

Zpracování chyby pomocí jazyka C++

Klientská aplikace rozhraní WMI může přijmout chyby specifické pro COM nebo WMI. Chyby modelu COM odpovídají struktuře kódů chyb modelu COM. Všechna rozhraní WMI mohou vrátit chybu specifickou pro COM, s výjimkou rozhraní IWbemContext, IWbemClassObjecta IWbemQualifierSet. Další informace o kódech chyb modelu COM naleznete v tématu Zpracování chyb. Referenční stránky rozhraní rozhraní WMI obsahují příslušné kódy chyb rozhraní WMI v části Kódy chyb.

Klientská aplikace musí dodržovat standardy modelu COM pro kontrolu stavu a návratových kódů chyb. Hlavní rozdíl, který musíte zvolit, je, zda chcete načíst kód chyby z synchronního, polosynchronního nebo asynchronního volání.

Přístup k synchronním a polosynchronním chybovým zprávám pomocí jazyka C++

  1. Načtěte informace o chybě voláním funkce COM GetErrorInfo.

    Nezapomeňte zavolat GetErrorInfo ihned poté, co metoda rozhraní indikuje chybu. To zahrnuje všechny IWbemCallResult metody, které voláte při zpracování polosynchronního procesu.

  2. Prozkoumejte vrácený objekt chyby modelu COM voláním metody IErrorInterface::QueryInterface.

    Nezapomeňte zadat IID_WbemClassObject pro parametr riid ve volání QueryInterface. Metoda QueryInterface vrátí instanci třídy WMI, obvykle __ExtendedStatus.

Rozhraní WMI nedoručí objekt chyby prostřednictvím GetErrorInfo pro asynchronní volání, protože neexistuje způsob, jak zjistit, kdy nebo ve kterém vlákně došlo k asynchronnímu volání. Proto může váš kód zpracovávat pouze konkrétní chyby, nebo předat selhání volání přes rozhraní COM.

Poznámka

Vzhledem k tomu, že zpětné volání do jímky nemusí být vráceno na stejné úrovni ověřování jako klient vyžaduje, doporučujeme místo asynchronní komunikace použít polosynchronní. Další informace naleznete v tématu Volání metody.

Přístup k asynchronním chybovým zprávům pomocí jazyka C++

  • Načtěte objekt chyby COM z vaší implementace IWbemObjectSink::SetStatus.

    Následující pseudokód ukazuje typickou implementaci zpracování chyb pro klientskou aplikaci.

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