[.net] 다음 오류로 인해 CLSID가 {XXXX} 인 구성 요소에 대한 COM 클래스 팩토리 검색에 실패했습니다 : 80040154

C # .NET을 사용하여 PDF 보고서를 생성하는 Windows 서비스를 개발했습니다. PDF 파일을 생성하려면 타사 dll을 사용하고 있습니다. 응용 프로그램이 Windows XP 플랫폼에서 실행되고 있습니다. Windows Server 2008 64 비트 버전 에서 서비스를 배포 할 때이 오류가 발생했습니다.

다음 오류로 인해 CLSID가 {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} 인 구성 요소에 대한 COM 클래스 팩토리 검색에 실패했습니다 : 80040154.

regsvr32 명령을 사용하여 DLL을 등록했습니다. 레지스트리에서이 CLSID를 볼 수 있습니다. 그러나 문제는 지속됩니다.

무엇이 문제 일 수 있습니까?



답변

VS-프로젝트 속성-빌드 탭-플랫폼 대상 = X86


답변

나는 매우 비슷한 문제에 부딪쳤다.

64 비트 컴퓨터에서 개발중인 웹 응용 프로그램 내에서 이전 32 비트 DLL을 사용해야했습니다. 해당 폴더의 regsrv32 버전을 사용하여 32 비트 DLL을 windows \ sysWOW64 폴더에 등록했습니다.

타사 DLL에 대한 호출은 Visual Studio의 단위 테스트에서 작동했지만 80040154 오류와 함께 같은 컴퓨터의 IIS에서 호스팅되는 웹 응용 프로그램에서는 실패했습니다.

응용 프로그램 풀을 “32 비트 응용 프로그램 사용”으로 변경하면 문제가 해결되었습니다.


답변

서비스가 ‘모든 CPU’에 대해 빌드 된 것처럼 들리므로 COM 구성 요소를 사용하는 64 비트에서 오류가 발생합니다. 에 대해 빌드해야합니다 x86.

웹 사이트가 32 비트 프로세스로 실행 중일 수 있으므로 구성 요소를 사용할 수 있습니다. 솔루션을 구축 x86하면 서비스가 32 비트로 실행됩니다.


답변

프로젝트 속성 플랫폼 대상 X86을 구성 할 필요가 없습니다. x86에서 작동하도록 iis 옵션을 구성 할 수도 있습니다.

  • 응용 프로그램 풀 선택
  • 앱에서 사용하는 풀을 선택하십시오
  • 고급 설정
  • 32 비트 응용 프로그램 사용 사실을

답변

CPU 응용 프로그램을 다시 컴파일하지 않고이 작업을 수행 할 수있는 방법을 찾고 있다면 다른 가능한 해결 방법이 있습니다.

  1. HKey_Classes_Root \ Wow6432Node \ CLSID \ {GUID}에서 COM 개체 GUID를 찾습니다.
  2. 찾은 후에는 새로운 REG_SZ (문자열) 값을 추가하십시오. 이름은 AppID 여야하고 데이터는 방금 검색 한 것과 동일한 COM 개체 GUID 여야합니다.
  3. HKey_Classes_Root \ Wow6432Node \ AppID 아래에 새 키를 추가하십시오. 새 키는 COM 개체 GUID와 동일하게 호출되어야합니다.
  4. 방금 추가 한 새 키에서 새 문자열 값을 추가하고이를 DllSurrogate라고합니다. 값을 비워 두십시오.
  5. HKey_Local_Machine \ Software \ Classes \ AppID \에 새 키를 만듭니다. 새 키는 COM 개체의 GUID와 동일하게 호출해야합니다. 이 키 아래에 값을 추가 할 필요가 없습니다.

나는 해결책에 대한 신용을 얻지 못했지만 그것은 우리에게 효과적이었다. 자세한 정보 및 기타 의견은 소스 링크를 확인하십시오.

출처 : https://techtalk.gfi.com/32bit-object-64bit-environment/


답변

문제는 서버 프로세스가 64 비트이고 라이브러리가 32 비트이며 동일한 프로세스 (프로 시저 서버)에서 COM 구성 요소를 만들려고한다는 것입니다. 서버를 다시 컴파일하여 32 비트로 만들거나 서버를 변경하지 않고 그대로두고 COM 구성 요소를 처리하지 못하게합니다. COM 서버를 프로세스 외부로 만드는 가장 쉬운 방법은 COM + 응용 프로그램-제어판-> 관리 도구-> ComponentServices를 만드는 것입니다.


답변

컴파일 설정을 변경하지 않았습니다.

AppPool 고급 설정에서 “32 비트 응용 프로그램 활성화 = True”를 설정하십시오.

그것은 나를 위해 일했다