2015-01-22 9 views
0

tlbimp.exe를 사용하여 만든 Interop 어셈블리를 참조했습니다. 지금, 나는COM 개체를 만들 때 예외가 발생했습니다.

var allplanInstance = new AllplApplicationClass(); 

이 내 컴퓨터 및 일부 고객의 컴퓨터에서 작업하는 것처럼이 상호 운용성 어셈블리에서 클래스의 객체를 생성 할 때. 그러나 다른 고객 기계에, 나는 다음과 같은 예외를 얻을 것이다 : 클래스-ID {D8CFBF83-AFC7-11D2-A4F4-0000D1106F9C가} 레지스트리에 등록되어 있다면 체크 한

System.Runtime.InteropServices.COMException (0x80004005): 
Creating an instance of the COM component with CLSID {D8CFBF83-AFC7-11D2-A4F4-0000D1106F9C} from the IClassFactory failed due to the following error: 80004005. 

을 -이 인 모든 기계의 경우.

이 문제의 원인을 확인하려면 어떻게해야합니까?

힌트를 보내 주셔서 감사합니다.

+0

아마도 프로그램을 운영하는 사용자에게 해당 레지스트리 키에 대한 액세스 권한이없는 것입니까? RegistryKey 클래스를 사용하여 해당 레지스트리 키에 대한 액세스를 선언함으로써 오브젝트 구성을 "보호"할 수 있습니다. 이는 권한 또는 누락 된 주요 문제점을 분리하여 80004005 COM 오류를 진단 할 수 있도록합니다. – PhillipH

+0

이 구성 요소 작성자의 지원이 필요합니다. 그는 의도적으로 새로운 객체를 생성하라는 요청에 실패했지만 아무 것도 의미하지 않는 오류 코드를 사용했습니다. E_FAIL은 오류보고의 품질에 대한 설명 일 뿐이며 이유를 진단하는 것은 쓸모가 없습니다. –

+0

나는 일반적으로 [Process Monitor] (https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)를 사용하여 오류를 해결합니다. 실패한 WinAPI 호출 만 표시하도록 필터를 구성하고 로그에서 해당 오류 앞에 오는 것을보십시오. – Noseratio

답변

0

이러한 유형의 응용 프로그램을 64 비트 컴퓨터에 배포 할 때 주로 발생합니다. 시스템이 64 비트라면 x86에서 호출하는 C# 응용 프로그램을 빌드해야합니다. COM dll은 Windows/SysWow64/폴더에있는 regsvr32.exe의 32 비트 버전을 사용하여 등록해야합니다.

관련 문제