共用方式為


解譯錯誤碼

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

在 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_已安裝
對象已經註冊。
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
已註冊的型別程式庫標識碼無效。
COM 管理員錯誤:無效的註冊表程序 ID
元件的 ProgID 遺失或損毀。
無法匯出應用程式代理 COMADMIN_E_CAN_NOT_EXPORT_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 檔案失敗)
無法載入 DLL。
COMADMIN_E_COMPFILE_NOREGISTRAR
此檔案中參考的元件註冊器無法使用。
COMADMIN_E_COMPFILE_NOTINSTALLABLE (無法安裝的組件檔案)
檔案不包含元件或元件資訊。
COMADMIN_E_COREQCOMPINSTALLED
已安裝相同 DLL 中的元件。
COMADMIN_E_DLLLOADFAILED
無法載入 DLL。
COMADMIN_E_DLLREGISTERSERVER
安裝元件時,DllRegisterServer 函式失敗。
Given that it seems to be a code identifier, no improvement is necessary, and it should remain the same.
事件類別無法設定為訂閱者元件。 嘗試將事件類別作為訂閱者建立訂用帳戶時,會傳回此錯誤。
COMADMIN_E_INVALIDUSERIDS
應用程式檔中的一或多個用戶無效。
COMADMIN_E_KEYMISSING (密碼缺失)
在目錄中找不到物件。
COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE
程式庫應用程式和應用程式代理不相容。 嘗試匯出應用程式 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_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+ 中處理錯誤的策略

疑難解答