共用方式為


解譯錯誤碼

在您判斷哪一個應用程式是問題的來源之後,您必須找出發生什麼錯誤。 視應用程式使用的語言而定,會以不同的格式引發和報告錯誤。

在 Microsoft Visual C++ 中,成功、警告和失敗值會使用稱為 HRESULT32 位數位傳回。 如需系統定義的 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
在應用程式上設定的身分識別或密碼無效。

錯誤隔離和失敗原則

尋找錯誤的來源

COM+ 如何修改傳回值

在 COM+ 中處理錯誤的策略

疑難排解