다음을 통해 공유


오류 코드 해석

문제의 원본인 애플리케이션을 결정한 후에는 발생한 오류를 확인해야 합니다. 애플리케이션에서 사용하는 언어에 따라 오류가 발생하고 다양한 형식으로 보고됩니다.

Microsoft Visual C++ 성공, 경고 및 실패 값은 HRESULT라고 하는 32비트 숫자를 사용하여 반환됩니다. 시스템 정의 HRESULT 값 목록은 Windows SDK에 포함된 헤더 파일 Winerror.h를 참조하세요. 이 파일에는 모든 COM+ 오류 코드 및 설명이 포함됩니다. HRESULT 값에 대한 자세한 내용은 오류 처리를 참조하세요.

Java 언어에서는 comFailException 개체가 HRESULT를 지정하는 오류를 나타내기 위해 com.ms.com.ComFailException의 instance throw됩니다. com.ms.com.comSuccessException의 instance 반환 값이 False인 성공을 나타냅니다. 이러한 예외를 해석하는 방법에 대한 자세한 내용은 Microsoft Visual J++ 설명서를 참조하세요.

참고

VJ6 IDE에서 JIT 디버깅을 해제하지 않는 한 Visual J++ 개체를 호스팅하는 COM+ 애플리케이션 서버 프로세스는 활성 개체가 0인 경우에도 유휴 상태가 되지 않습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 Visual J++ 설명서를 참조하세요.

Visual Basic에서는 Err.Number 속성을 검사하여 HRESULT 값을 검색할 수 있습니다. 오류에 대한 설명은 Err.Description 속성을 사용하여 검색할 수 있습니다.

Microsoft Visual Studio에서 ERRLOOK 유틸리티를 사용하여 시스템 오류 메시지 또는 모듈 오류 메시지를 검색할 수도 있습니다. ERRLOOK는 Visual Studio 디버거 또는 다른 Automation 지원 애플리케이션에서 16진수 또는 10진수 값을 끌어서 놓으면 오류 메시지 텍스트를 자동으로 검색합니다. 값을 입력하거나 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+ 애플리케이션만 "큐" 모니커를 사용하여 만들 수 있습니다.
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
이 개체에 대해 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
애플리케이션에서 설정된 ID 또는 암호가 잘못되었습니다.

오류 격리 및 장애 조치(failfast) 정책

오류의 원본 찾기

COM+가 반환 값을 수정하는 방법

COM+에서 오류를 처리하기 위한 전략

문제 해결