Asynchrone fouten Configuration Manager afhandelen met behulp van beheerde code
Als u een Configuration Manager fout wilt afhandelen die wordt gegenereerd tijdens een asynchrone query, test u de RunWorkerCompletedEventArgs
parameter Error Exception-eigenschap die wordt doorgegeven aan de gebeurtenis-handler SmsBackgroundWorker.QueryProcessorCompleted. Als Fout niet null
is, is er een uitzondering opgetreden en gebruikt u Fout om de oorzaak te detecteren.
Als Error een SmsQueryException is, kunt u deze gebruiken om naar de onderliggende __ExtendedException
of SMS_ExtendedException
te gaan. Omdat de bibliotheek van de beheerde SMS-provider deze uitzonderingen niet verpakt, moet u het object System.Management-naamruimte ManagementException gebruiken om ze te openen.
Een asynchrone queryfout afhandelen
Maak een asynchrone query.
Implementeer de code in het volgende voorbeeld in de asynchrone query SmsBackgroundWorker.QueryProcessorCompleted .
Voer de asynchrone query uit. Als u de uitzonderingshandler wilt testen, geeft u een slecht gevormde querytekenreeks door, zoals
Select & from &&&
aan de methode QueryProcessorBase.ProcessQuery .
Voorbeeld
In het volgende voorbeeld wordt een gebeurtenis-handler SmsBackgroundWorker.QueryProcessorCompleted geïmplementeerd .
Zie Aanroepen Configuration Manager codefragmenten voor meer informatie over het aanroepen van de voorbeeldcode.
void bw1_QueryProcessorCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
Console.WriteLine("There was an Error");
if (e.Error is SmsQueryException)
{
SmsQueryException queryException = (SmsQueryException)e.Error;
Console.WriteLine(queryException.Message);
// Get either the __ExtendedStatus or SMS_ExtendedStatus object and display various properties.
ManagementException mgmtExcept = queryException.InnerException as ManagementException;
if (mgmtExcept != null)
{
if (string.Equals(mgmtExcept.ErrorInformation.ClassPath.ToString(), "SMS_ExtendedStatus", StringComparison.OrdinalIgnoreCase) == true)
{
Console.WriteLine("Configuration Manager provider exception");
}
else if (string.Equals(mgmtExcept.ErrorInformation.ClassPath.ToString(), "__ExtendedStatus", StringComparison.OrdinalIgnoreCase) == true)
{
Console.WriteLine("WMI exception");
}
Console.WriteLine(mgmtExcept.ErrorCode.ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["ParameterInfo"].ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["Operation"].ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["ProviderName"].ToString());
}
}
if (e.Error is SmsConnectionException)
{
Console.WriteLine("There was a connection error :" + ((SmsConnectionException)e.Error).Message);
Console.WriteLine(((SmsConnectionException)e.Error).ErrorCode);
}
}
Console.WriteLine("Done...");
}
De voorbeeldmethode heeft de volgende parameters:
Parameter | Type | Beschrijving |
---|---|---|
sender |
- Object |
De bron van de gebeurtenis. |
e |
- RunWorkerCompletedEventArgs |
De gebeurtenisgegevens. Zie RunWorkerCompletedEventArgs-klasse voor meer informatie. |
De code compileren
Voor dit C#-voorbeeld is het volgende vereist:
Naamruimten
Systeem
System.Collections.Generic
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.ComponentModel
Vergadering
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Robuust programmeren
Zie Over Configuration Manager fouten voor meer informatie over foutafhandeling.