解譯錯誤碼
在您判斷哪一個應用程式是問題的來源之後,您必須找出發生什麼錯誤。 視應用程式使用的語言而定,會以不同的格式引發和報告錯誤。
在 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 |
只有標示為「已排入佇列」的 COM+ 應用程式可以使用「佇列」Moniker 來建立。 |
COMADMIN_E_APPLICATIONEXISTS |
應用程式已安裝。 |
COMADMIN_E_APPLID_MATCHES_CLSID |
此電腦上已安裝與新應用程式識別碼相同的 GUID CLSID。 |
COMADMIN_E_APP_NOT_RUNNING |
指定的應用程式目前未執行。 |
COMADMIN_E_AUTHENTICATIONLEVEL |
無法為更新要求設定必要的驗證層級。 |
COMADMIN_E_BADPATH |
檔案路徑無效。 |
COMADMIN_E_BADREGISTRYLIBID |
已註冊的類型連結庫標識碼無效。 |
COMADMIN_E_BADREGISTRYPROGID |
元件的 ProgID 遺失或損毀。 |
COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY |
無法匯出應用程式 Proxy。 |
COMADMIN_E_CAN_NOT_START_APP |
無法啟動應用程式,因為它是連結庫應用程式或應用程式 Proxy。 |
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 |
連結庫應用程式和應用程式 Proxy 不相容。 嘗試匯出應用程式 Proxy,而應用程式的啟用屬性是連結庫時,就會傳回此錯誤。 |
COMADMIN_E_NOREGISTRYCLSID |
元件的 CLSID 遺失或損毀。 |
COMADMIN_E_NOSERVERSHARE |
沒有可用的伺服器檔案共用。 |
COMADMIN_E_NOTCHANGEABLE |
已停用此對象的變更及其子物件。 |
COMADMIN_E_NOTDELETEABLE |
此物件的 delete 函式已停用。 |
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 |
在應用程式上設定的身分識別或密碼無效。 |