Problembehandlung bei WMI-Clientanwendungen
WMI enthält eine Reihe von Klassen für die Problembehandlung von Clientanwendungen, die WMI-Anbieter verwenden. Die Ereignisklassen zur Problembehandlung sind an WMI-Ereignisklassen gekoppelt, sodass Sie die Anwendungsausführung mithilfe eines Protokolls erfasster Problembehandlungsereignisse nachverfolgen können.
Die folgende Liste enthält Beispiele für Ereignisklassen zur Problembehandlung:
Msft _ WmiProvider _ ExecMethodAsyncEvent _ Pre
Wird ausgelöst, bevor WMI IWbemServices::ExecMethodAsync() für den Anbieter aufruft.
Msft _ WmiProvider _ ExecMethodAsyncEvent _ Post
Wird ausgelöst, nachdem WMI IWbemServices::ExecMethodAsync() für den Anbieter aufgerufen hat.
Das folgende Verfahren veranschaulicht die Problembehandlung bei der Anwendungsausführung.
So richten Sie die WMI-Problembehandlung ein
- Erstellen und kompilieren Sie eine MOF-Datei, um den WMI-Protokollierungsereignis-Consumer zu verwenden.
- Führen Sie Ihre Clientanwendung aus.
- Zeigen Sie die Protokolldatei zur Problembehandlung für alle Anbietervorgangs- und Fehlerereignisse an, und analysieren Sie das Protokoll, um die aufgetretenen Clientprobleme zu diagnostizieren.
Ein weiterer Ansatz zur Problembehandlung besteht darin, die Liste der Anbieter anzuzeigen, die sich derzeit im Computercache befinden, indem _ MSFT-Anbieter im \ Cimv2-Stammnamespace aufgeführt werden. Es gibt Methoden in dieser Klasse, mit denen Sie Anbieter zu Debug- oder Setupzwecken laden und entladen können.
Im folgenden Codebeispiel wird der WMI-Protokollierungsereignis-Consumer verwendet, um alle Ereignisse der übergeordneten Ereignisklasse zu erfassen und somit alle Anbietervorgangsereignisse zu erfassen.
#pragma autorecover
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $Filter
{
Name = "ProviderOperationEvents" ;
EventNamespace = "root\\cimv2" ;
Query = "SELECT * FROM MSFT_WmiProvider_OperationEvent" ;
QueryLanguage = "WQL" ;
} ;
Instance of LogFileEventConsumer as $Consumer
{
Name = "ProviderOperationEvents" ;
FileName = "C:\\test.txt" ;
Text = "Operation - %__TEXT%" ;
} ;
instance of __FilterToConsumerBinding
{
Filter = $Filter ;
Consumer = $Consumer ;
MaintainSecurityContext = TRUE ;
} ;
Wenn Fehlermeldungen auf einen Fehler beim Laden des Anbieters hinweisen, verwenden Sie MSFT _ WmiProvider _ LoadOperationFailureEvent, um zu ermitteln, welcher Anbieter den Fehler verursacht hat.