Обработка синхронных ошибок Configuration Manager с помощью управляемого кода
Чтобы обработать ошибку Configuration Manager, которая возникает в синхронном запросе, перехватывается исключение SmsQueryException. Так как это исключение также перехватывается SMS_Exception], его и исключение SmsConnectionException можно поймать в том же блоке catch.
Если исключение, которое попадает в SMS_Exception является smsQueryException, его можно использовать для получения базового __ExtendedException
или SMS_ExtendedException
. Так как управляемая библиотека поставщика SMS не содержит оболочку этих исключений, для доступа к ним потребуется использовать объект ManagementException пространства имен System.Management.
Примечание.
Для ясности большинство примеров в этой документации просто повторно создают исключения. Вы можете заменить их приведенным ниже примером, если требуется более информативная информация об исключении.
Обработка ошибки синхронного запроса
Напишите код для доступа к поставщику SMS.
Используйте следующий пример кода для перехвата исключений SmsQueryException и SmsConnectionException .
Пример
Следующий пример функции C# пытается открыть несуществующий SMS_Package
пакет. В обработчике исключений код определяет, какой тип ошибки был вызван, и отображает сведения о ней.
Сведения о вызове примера кода см. в разделе Вызов фрагментов кода 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);
}
}
}
Метод примера имеет следующие параметры:
Параметр | Тип | Описание |
---|---|---|
connection |
- WqlConnectionManager |
Допустимое подключение к поставщику. |
Компиляция программы
Для этого примера на C# требуется следующее:
Пространства имен
System;
System.Collections.Generic;
System.Text
Майкрософт. ConfigurationManagement.ManagementProvider
Майкрософт. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.ComponentModel
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Надежное программирование
Дополнительные сведения об обработке ошибок см. в разделе Сведения об ошибках Configuration Manager.
См. также
Сведения об ошибкахОбработка асинхронных ошибок Configuration Manager с помощью управляемого кода