Интерпретация кодов ошибок
После определения того, какое приложение является источником проблемы, необходимо выяснить, какая ошибка произошла. Ошибки возникают и сообщаются в разных форматах в зависимости от языка, используемого приложением.
В Microsoft Visual C++значения успешности, предупреждения и сбоя возвращаются с помощью 32-разрядного номера, известного как HRESULT. Список системных значений HRESULT см. в файле заголовка Winerror.h, включенном в пакет SDK для Windows. Этот файл содержит все коды ошибок и описания COM+. Дополнительные сведения о значениях HRESULT см. в разделе обработки ошибок .
На языке Java выбрасывается экземпляр com.ms.com.ComFailException, указывающий на сбой, причем объект ComFailException определяет HRESULT. Экземпляр com.ms.com.ComSuccessException указывает на успешное выполнение, хотя возвращаемое значение равно False. Сведения о интерпретации этих исключений см. в документации по Microsoft Visual J++.
Заметка
Процессы сервера приложений COM+, в которых размещаются объекты Visual J++, не будут бездействующими (даже с нулевыми активными объектами), если вы не отключите отладку JIT в интегрированной среде разработки VJ6. Дополнительные сведения о том, как это сделать, см. в документации по Visual J++.
В Visual Basic можно получить значения HRESULT, проверив свойство Err.Number. Описание ошибки можно получить с помощью свойства Err.Description.
Вы также можете использовать служебную программу ERRLOOK в Microsoft Visual Studio для получения системного сообщения об ошибке или сообщения об ошибке модуля. ERRLOOK автоматически извлекает текст сообщения об ошибке при перетаскивании шестнадцатеричного или десятичного значения из отладчика Visual Studio или другого приложения с поддержкой автоматизации. Можно также ввести значение, набрав его вручную или вставив из буфера обмена интегрированной среды разработки, и затем щелкнуть на параметре "Поиск".
Следующий метод C++ выводит описание ошибки на основе входных HRESULT.
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
void ErrorDescription(HRESULT hr)
{
if(FACILITY_WINDOWS == HRESULT_FACILITY(hr))
hr = HRESULT_CODE(hr);
TCHAR* szErrMsg;
if(FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&szErrMsg, 0, NULL) != 0)
{
_tprintf(TEXT("%s"), szErrMsg);
LocalFree(szErrMsg);
} else
_tprintf( TEXT("[Could not find a description for error # %#x.]\n"), hr);
}
В следующей таблице приведены описания распространенных кодов ошибок в COM+.
Коды ошибок | Определения |
---|---|
COMADMIN_E_ALREADYINSTALLED |
Объект уже зарегистрирован. |
COMADMIN_E_APP_FILE_READFAIL (Ошибка: Не удаётся прочитать файл приложения) |
Произошла ошибка с чтением файла приложения. |
COMADMIN_E_APP_FILE_VERSION |
Недопустимый номер версии в файле приложения. |
COMADMIN_E_APP_FILE_WRITEFAIL (Ошибка записи файла приложения) |
Произошла ошибка записи в файл приложения. |
COMADMIN_E_APPDIRNOTFOUND |
Каталог установки приложений не найден. |
COMQC_E_APPLICATION_NOT_QUEUED |
С помощью моникера "очередь" можно создать только приложения COM+, помеченные как "очередь". |
COMADMIN_E_APPLICATIONEXISTS |
Приложение уже установлено. |
COMADMIN_E_APPLID_MATCHES_CLSID |
CLSID с таким же GUID, как и у нового идентификатора приложения, уже установлен на этом компьютере. |
COMADMIN_E_APP_NOT_RUNNING |
Указанное приложение в настоящее время не запущено. |
COMADMIN_E_AUTHENTICATIONLEVEL |
Не удалось задать необходимый уровень проверки подлинности для запроса на обновление. |
Ошибка COMADMIN: Неверный путь |
Недопустимый путь к файлу. |
COMADMIN_E_BADREGISTRYLIBID |
Идентификатор зарегистрированной библиотеки типов недопустим. |
COMADMIN_E_BADREGISTRYPROGID |
Идентификатор progID компонента отсутствует или поврежден. |
COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY |
Прокси приложения не экспортируется. |
COMADMIN_E_CAN_NOT_START_APP |
Не удалось запустить приложение, так как это приложение библиотеки или прокси приложения. |
COMADMIN_E_CAN_NOT_EXPORT_SYS_APP |
Системное приложение не экспортируется. |
Невозможно подписаться на компонент. |
Пользователь не может подписаться на этот компонент, так как компонент может быть импортирован. |
COMADMIN_E_CANTCOPYFILE |
Произошла ошибка при копировании файла. |
COMADMIN_E_CLSIDORIIDMISMATCH |
Файлы CLSID или IID приложения не соответствуют соответствующим DLL-файлам. |
COMADMIN_E_COMP_MOVE_BAD_DEST – Ошибка: Неправильное местоположение для перемещения компонента. |
Сбой перемещения компонента, так как целевое приложение больше не существует. |
COMADMIN_E_COMP_MOVE_LOCKED - Перемещение компонента заблокировано |
Перемещение компонента было запрещено, так как исходное или целевое приложение является системным приложением или в настоящее время заблокировано для изменений. |
COMADMIN_E_COMPFILE_BADTLB |
Не удалось загрузить библиотеку типов. |
COMADMIN_E_COMPFILE_CLASSNOTAVAIL |
Библиотека DLL не поддерживает компоненты, перечисленные в библиотеке типов. |
COMADMIN_E_COMPFILE_DOESNOTEXIST (файл компонента не существует) |
Этот файл не существует. |
COMADMIN_E_COMPFILE_GETCLASSOBJ |
Сбой метода getClassObject в библиотеке DLL. |
Ошибка COMADMIN_E_COMPFILE_LOADDLLFAIL: не удалось загрузить DLL-файл. |
Не удалось загрузить библиотеку DLL. |
COMADMIN_E_COMPFILE_NOREGISTRAR |
Регистратор компонентов, на который ссылается этот файл, недоступен. |
COMADMIN_E_COMPFILE_NOTINSTALLABLE |
Файл не содержит компонентов или информации о них. |
COMADMIN_E_COREQCOMPINSTALLED |
Компонент в той же библиотеке DLL уже установлен. |
Ошибка COMADMIN_E_DLLLOADFAILED: не удалось загрузить DLL. |
Не удалось загрузить библиотеку DLL. |
COMADMIN_E_DLLREGISTERSERVER |
Функция DllRegisterServer завершилась сбоем при установке компонента. |
COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER |
Класс событий нельзя настроить как компонент подписчика. При попытке создать подписку, где класс событий выступает в роли подписчика, возвращается эта ошибка. |
COMADMIN_E_INVALIDUSERIDS |
Один или несколько пользователей в файле приложения неверны. |
COMADMIN_E_KEYMISSING |
Объект не найден в каталоге. |
COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE (Ошибка: несовместимость библиотеки прокси приложения). |
Приложения библиотеки и прокси приложения несовместимы. Эта ошибка возвращается при попытке экспортировать прокси приложения, а свойство активации приложения — это библиотека. |
COMADMIN_E_NOREGISTRYCLSID |
CLSID компонента отсутствует или поврежден. |
COMADMIN_E_NOSERVERSHARE |
Общий файловый ресурс сервера недоступен. |
COMADMIN_E_NOTCHANGEABLE |
Изменения этого объекта и его вложенных объектов были отключены. |
COMADMIN_E_NOTDELETEABLE |
Функция удаления отключена для этого объекта. |
COMADMIN_E_NOTINREGISTRY |
Объект не найден в реестре. |
COMADMIN_E_NOUSER |
Один или несколько пользователей не являются допустимыми. |
COMADMIN_E_OBJECT_DOES_NOT_EXIST |
Не удается найти один из указанных объектов. |
COMADMIN_E_OBJECT_PARENT_MISSING (Ошибка: отсутствует родительский объект) |
Один из объектов, вставляемых или обновляемых, не принадлежит допустимой родительской коллекции. |
COMADMIN_E_OBJECTERRORS |
Произошли ошибки, связанные с доступом к одному или нескольким объектам. Дополнительные сведения см. в коллекции ErrorInfo. |
COMADMIN_E_OBJECTEXISTS |
Объект, который вы пытаетесь добавить или переименовать уже существует. |
COMADMIN_E_OBJECTINVALID |
Одно или несколько свойств объекта отсутствуют или недопустимы. |
COMADMIN_E_OBJECTNOTPOOLABLE |
Этот объект нельзя объединить в пул. |
COMADMIN_E_PROPERTYSAVEFAILED |
Один или несколько параметров свойства являются недопустимыми или конфликтуют друг с другом. |
COMADMIN_E_ПЕРЕПОЛНЕНИЕ_СВОЙСТВА |
Значение свойства слишком велико. |
COMADMIN_E_REGFILE_CORRUPT |
Файл регистрации поврежден. |
COMADMIN_E_REGISTERTLB |
Система не смогла зарегистрировать библиотеку типов. |
COMADMIN_E_REGISTRARFAILED |
Ошибки произошли в регистраторе компонентов. |
COMADMIN_E_REMOTEINTERFACE |
Сведения об интерфейсе отсутствуют или изменены. |
Требуется другая платформа |
Эта операция не включена на этой платформе. |
COMADMIN_E_ROLE_DOES_NOT_EXIST |
Роль, назначенная компоненту, интерфейсу или методу, не существует в приложении. |
COMADMIN_E_РОЛЬ_УЖЕ_СУЩЕСТВУЕТ |
Роль уже существует. |
COMADMIN_E_SERVICENOTINSTALLED |
Служба не установлена. |
COMADMIN_E_SESSION |
Версия каталога сервера не поддерживается. |
Некоторые уже приостановлены |
Один или несколько указанных процессов приложений уже приостановлены. |
ОШИБКА_COMADMIN_НЕСКОТОРЫЕ_УЖЕ_ЗАПУЩЕНЫ |
Один или несколько указанных процессов приложений уже запущены. |
COMADMIN_E_START_APP_NEEDS_COMPONENTS |
Чтобы запустить приложение, необходимо иметь компоненты в приложении. |
COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE (приложение службы COM не может быть размещено в пуле или переработано) |
Приложения COM+, работающие в качестве службы NT, могут не иметь свойств объединения в пул или переработки. |
COMADMIN_E_SYSTEMAPP |
Эту операцию нельзя выполнить в системном приложении. |
COMADMIN_E_USER_IN_SET |
Одному или нескольким пользователям уже назначены локальный набор разделов. |
COMADMIN_E_USERPASSWDNOTVALID |
Идентификатор или пароль, заданные в приложении, недействительны. |
Связанные разделы
-
изолирование отказов и политика немедленного отказа
-
стратегии обработки ошибок в COM+