Jak obsługiwać błędy synchroniczne Configuration Manager przy użyciu kodu zarządzanego
Aby obsłużyć błąd Configuration Manager zgłaszany w zapytaniu synchronicznym, należy złapać wyjątek SmsQueryException. Ponieważ ten wyjątek jest również przechwytywany przez SMS_Exception], można go złapać i wyjątek SmsConnectionException w tym samym bloku catch.
Jeśli wyjątek przechwycony w SMS_Exception to SmsQueryException, możesz użyć go, aby przejść do obiektu bazowego __ExtendedException
lub SMS_ExtendedException
. Ponieważ zarządzana biblioteka dostawcy programu SMS nie zawija tych wyjątków, musisz użyć obiektu System.Management Namespace ManagementException , aby uzyskać do nich dostęp.
Uwaga
Aby uzyskać jasność, większość przykładów w tej dokumentacji po prostu ponownie zgłasza wyjątki. Możesz zastąpić je poniższym przykładem, jeśli chcesz uzyskać więcej informacji o wyjątkach.
Aby obsłużyć błąd zapytania synchronicznego
Napisz kod, aby uzyskać dostęp do dostawcy programu SMS.
Użyj następującego przykładowego kodu, aby przechwytywać wyjątki SmsQueryException i SmsConnectionException .
Przykład
Następująca przykładowa funkcja języka C# próbuje otworzyć nieistniejący SMS_Package
pakiet. W procedurze obsługi wyjątków kod określa, jaki typ błędu został zgłoszony, i wyświetla jego informacje.
Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz Wywoływanie fragmentów kodu Configuration Manager.
public void ExerciseException(WqlConnectionManager connection)
{
try
{
IResultObject package = connection.GetInstance(@"SMS_Package.PackageID='UNKNOWN'");
Console.WriteLine("Package Name: " + package["Name"].StringValue);
Console.WriteLine("Package Description: " + package["Description"].StringValue);
}
catch (SmsException e)
{
if (e is SmsQueryException)
{
SmsQueryException queryException = (SmsQueryException)e;
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 is SmsConnectionException)
{
Console.WriteLine("There was a connection error :" + ((SmsConnectionException)e).Message);
Console.WriteLine(((SmsConnectionException)e).ErrorCode);
}
}
}
Przykładowa metoda ma następujące parametry:
Parametr | Wpisać | Opis |
---|---|---|
connection |
- WqlConnectionManager |
Prawidłowe połączenie z dostawcą. |
Kompilowanie kodu
Ten przykład języka C# wymaga:
Obszary nazw
System
System.collections.generic
System.text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.componentmodel
Zestawu
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Niezawodne programowanie
Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Informacje o błędach Configuration Manager.
Zobacz też
Informacje obłędach Jak obsługiwać błędy asynchroniczne Configuration Manager przy użyciu kodu zarządzanego