Поделиться через


Интерпретация кодов ошибок

После определения того, какое приложение является источником проблемы, необходимо выяснить, какая ошибка произошла. Ошибки возникают и сообщаются в разных форматах в зависимости от языка, используемого приложением.

В 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+ изменяет возвращаемые значения

стратегии обработки ошибок в COM+

устранение неполадок