解释错误代码
在确定了哪个应用程序是造成问题的根源之后,需要找出发生了什么错误。 根据应用程序使用的语言,会以不同的格式提出和报告错误。
在 Microsoft Visual C++ 中,使用称为 HRESULT 的 32 位数字返回成功、警告和失败值。 有关系统定义的 HRESULT 值的列表,请参阅 Windows SDK 附带的标头文件 Winerror.h。 此文件包括所有 COM+ 错误代码和说明。 有关 HRESULT 值的详细信息,请参阅错误处理。
在 Java 语言中,将引发 com.ms.com.ComFailException 实例以指示失败,其中 ComFailException 对象指定 HRESULT。 com.ms.com.ComSuccessException 的实例指示成功,返回值为 False。 有关解释这些异常的信息,请参阅 Microsoft Visual J++ 文档。
注意
托管 Visual J++ 对象的 COM+ 应用程序服务器进程不会空闲(即使没有活动对象),除非在 VJ6 IDE 中关闭 JIT 调试。 有关如何执行此操作的信息,请参阅 Visual J++ 文档。
在 Visual Basic 中,可以通过检查 Err.Number 属性来检索 HRESULT 值。 可以使用 Err.Description 属性检索错误的说明。
还可以使用 Microsoft Visual Studio 中的 ERRLOOK 实用工具,检索系统错误消息或模块错误消息。 如果从 Visual Studio 调试器或其他启用自动化的应用程序拖放十六进制或十进制值,则 ERRLOOK 会自动检索错误消息文本。 还可以通过键入值或从 IDE 剪贴板粘贴值并单击查找选项来输入值。
以下 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 |
只能使用“queue”名字对象创建标记为“已排队”的 COM+ 应用程序。 |
COMADMIN_E_APPLICATIONEXISTS |
应用程序已安装。 |
COMADMIN_E_APPLID_MATCHES_CLSID |
此计算机上已安装与新应用程序 ID 具有相同 GUID 的 CLSID。 |
COMADMIN_E_APP_NOT_RUNNING |
指定的应用程序当前未运行。 |
COMADMIN_E_AUTHENTICATIONLEVEL |
无法为更新请求设置所需的身份验证级别。 |
COMADMIN_E_BADPATH |
文件路径无效。 |
COMADMIN_E_BADREGISTRYLIBID |
已注册的类型库 ID 无效。 |
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_CANT_SUBSCRIBE_TO_COMPONENT |
用户无法订阅此组件,因为该组件可能已导入。 |
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 |
DLL 中的 GetClassObject 方法失败。 |
COMADMIN_E_COMPFILE_LOADDLLFAIL |
无法加载 DLL。 |
COMADMIN_E_COMPFILE_NOREGISTRAR |
此文件中引用的组件注册器不可用。 |
COMADMIN_E_COMPFILE_NOTINSTALLABLE |
该文件不包含组件或组件信息。 |
COMADMIN_E_COREQCOMPINSTALLED |
已安装同一 DLL 中的组件。 |
COMADMIN_E_DLLLOADFAILED |
无法加载 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_PROPERTY_OVERFLOW |
属性值太大。 |
COMADMIN_E_REGFILE_CORRUPT |
注册文件已损坏。 |
COMADMIN_E_REGISTERTLB |
系统无法注册类型库。 |
COMADMIN_E_REGISTRARFAILED |
组件注册器中发生错误。 |
COMADMIN_E_REMOTEINTERFACE |
接口信息缺失或更改。 |
COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM |
此平台上未启用此操作。 |
COMADMIN_E_ROLE_DOES_NOT_EXIST |
分配给组件、接口或方法的角色在应用程序中不存在。 |
COMADMIN_E_ROLEEXISTS |
角色已存在。 |
COMADMIN_E_SERVICENOTINSTALLED |
未安装该服务。 |
COMADMIN_E_SESSION |
不支持服务器目录版本。 |
COMADMIN_S_SOMEALREADYPAUSED |
已暂停一个或多个指定的应用程序进程。 |
COMADMIN_S_SOMEALREADYRUNNING |
一个或多个指定的应用程序进程已在运行。 |
COMADMIN_E_START_APP_NEEDS_COMPONENTS |
若要启动应用程序,应用程序中必须有组件。 |
COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE |
作为 NT 服务运行的 COM+ 应用程序可能不会标记为共用或回收。 |
COMADMIN_E_SYSTEMAPP |
无法对系统应用程序执行此操作。 |
COMADMIN_E_USER_IN_SET |
已将一个或多个用户分配到本地分区集。 |
COMADMIN_E_USERPASSWDNOTVALID |
应用程序上设置的标识或密码无效。 |