간단한 요약 답변
중단해야 함 COM 등록(신뢰할 수 없음)을 위해 배치 파일 및 사용자 정의 작업을 사용하고 WiX 툴킷의 heat.exe 도구를 사용하여 COM 등록 정보를 추출하여 컴파일 타임에 MSI 데이터베이스에 COM 등록을 추가합니다.
다음이 있습니다. 64비트 바이너리의 일부 합병증은 아래 세부정보를 참조하세요. 다행스럽게도 위에 표시된 설치 디렉터리를 기반으로 32비트 구성 요소를 다루고 있는 것 같습니다.
이 특별한 경우에는 모든 종속성이 "in"인 경우 배포 후 COM 파일에서 heat.exe를 실행하는 데 도움이 되었습니다. COM 파일이 제대로 로드되도록 하려면 "place"를 선택하세요. 이 답변에는 "디버깅 통신"이 많이 있습니다. 나중에 모든 것을 그대로 두겠지만 먼저 이 간단한 솔루션을 시도해 보십시오. 그리고 아래에 설명된 새로운 종속성 도구인 "Dependency.exe"를 사용해 보세요.
길고 자세한 답변
질문에 답하기 전에 종속성 누락 또는 배치 파일에서 이상한 작업 수행), COM 등록 모범 사례와 관련하여 몇 가지 사항을 정리하고 싶습니다.
유해한 것으로 간주되는 자체 등록
COM 파일을 등록하는 데 자체 등록을 사용하면 안 됩니다. 그 이유에 대한 설명은 다음과 같습니다. [MSI 등록 dll - 자체 등록이 유해한 것으로 간주됨](https://stackoverflow.com/questions/2736641/com-registration-where-did-the-idea-of-no -자가 등록-from/2737548#2737548). 그러나 좋은 소식이 있습니다. 내장된 MSI 메커니즘을 통해 의도한 대로 작업을 수행하면 제대로 설정되면 더 쉽고 안정적이게 됩니다.
사용자 정의 작업이나 SelfReg 테이블을 사용하는 대신 COM 등록 정보 컴파일 타임, 즉 WiX 소스 파일에서 MSI 파일을 컴파일할 때 COM 파일에서 추출되어야 합니다. 추출된 레지스트리 데이터는 각각 설치 및 제거 중에 COM 파일을 안정적으로 등록 및 등록 취소하도록 설계된 MSI 데이터 테이블 계열을 채우는 데 사용되어야 합니다.
WiX: "heat.exe" 명령줄 도구
이 프로세스의 복잡한 세부 사항을 이해할 필요는 없습니다. 사용할 도구만 알면 됩니다. WiX는 이러한 목적으로 "heat.exe" 도구를 제공합니다. 이는 본질적으로 여러 목적으로 유효한 WiX XML 소스 파일을 생성할 수 있는 "수확기" 도구입니다. 그 중 하나는 COM 추출입니다. 또한 일반적으로 디렉터리 탐색을 지원합니다. 탐색 중에 발견된 파일을 설치할 수 있는 WiX 소스 파일을 생성합니다. 사용법만 알면 MSI 패키지를 만드는 매우 빠른 방법입니다.
Dependency Walker
그래서 우리는 heat.exe를 사용하여 COM 파일을 올바르게 등록하는 데 필요한 WiX 소스를 생성하는 방법을 배우는 데 시간을 투자해야 한다고 설정했습니다. 그러나 종속성 누락이라는 문제가 하나 더 있습니다.
COM 파일을 자체 등록할 수 있거나 heat.exe를 사용하여 COM 레지스트리 데이터를 성공적으로 추출할 수 있는 경우 - COM 파일을 올바르게 로드할 수 있어야 합니다. 이것이 가능하려면 문제의 시스템에서 액세스 가능한 위치에 있는 모든 dll 종속성을 사용할 수 있어야 합니다.
Dependency Walker의 복사본을 구해 이를 사용하여 COM 파일이 종속된 파일을 검색합니다. 다음은 MMUtilities.dll을 찾을 수 없어 로드에 실패한 COM 파일의 예입니다.
[누락된 종속성을 표시하는 종속성 워커 출력 이미지]
비슷한 문제가 있을 가능성이 높습니다. 설정의 설치 위치에서 실행될 때 dll(또는 OCX와 같은 파일 형식)을 사용하여 실행합니다. regsvr32.exe에서 필요한 종속성 파일을 찾을 수 없으며 등록 프로세스가 실패합니다.
중요하지 않지만 누락된 종속성이 보고된 경우가 있습니다 - 이는 나이와 관련이 있는 것 같습니다. 종속성 워커 도구 - 내가 아는 한 최근에 업데이트되지 않았습니다. 들어본 적이 없는 매우 긴 dll 이름이 아닌, 자신만의 종속 파일이나 핵심 시스템 파일로 인식되는 파일을 찾으세요. 일부 dll에는 로드에 필요한 종속 언어 dll이 있다는 점을 명심하세요. 예를 들어 MMUtilities.dll을 올바르게 로드하려면 동일한 폴더에 MmUtilitiesEnglish.dll 또는 다른 언어 dll이 있어야 합니다.
위 파일에 대한 일부 샘플 거짓 긍정 종속성: API-MS -WIN-CORE-RTLSUPPORT-L1-1-0.DLL, API-MS-WIN-CORE-PROCESSTHREADS-L1-1-0.DLL, API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL 등... 많았습니다. 이러한 잘못된 긍정의 근본 원인은
에 설치된 병렬 구성 요소의 문제에 있다고 생각하지만 확실하지는 않습니다.위 내용은 Wix MSI 설치 프로그램을 사용하여 CPP DLL을 COM에 올바르게 등록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!