2010-07-14 6 views
2

내 MSI 설치 프로그램은 XP에서 DLL을 등록하지 않습니다. Vista에서는 관리자가 아니면 등록하지 않습니다. Win7에서는 DLL을 무조건 등록합니다.MSI Desparation. MSI는 DLL을 등록하지 않습니다

MSI가 DLL을 등록하지 않으면 사용자는 설치 폴더로 이동하여 "regsvr32 mydllname.dll"을 입력해야합니다. 그러면 모든 것이 올바르게 작동합니다 (DLL이 건강하고 양호 함을 증명 함).

이 파일의 "register"속성은 MSI 프로젝트에서 "selfReg"입니다. "COM"도 작동하지 않습니다.

나는 환각 상태에 있거나 MSI가 단순히 DLL을 등록 할 수 없다고 생각하기 시작했습니다 .... 매우 매우 좌절되었습니다. 이 주와 NADA를 해결하기위한 시도에 이미 한 주간. 나는이 시점에서 MS를 정말로 싫어한다.

도와주세요.

답변

3

가장 많이 발생하는 것은 등록 코드가 잘못된 레지스트리 루트에 쓰고 있다는 것입니다. 예를 들어, HKCRHKLM\ClassesHKCU\Classes의 병합보기이며 HKCR에 대한 등록은 HKCU\Classes으로 끝나고 때로는 HKCU\Classes\VirtualStore으로 끝나고 설치 프로그램이 실행 된 계정에 따라 달라집니다.

DllRegisterServer에서 COM dll을 MSI로 등록하는 경우 MSI 엔진은 레지스트리 항목을 알지 못하며 실제 DLL 코드를 사용합니다.

내가 제안하는 바는 DllRegisterServer을 사용하는 자동 등록을 사용하지 않고 HKCR에 등록하지 않기 위해 MSI를 변경하는 것입니다. 대신, HKLM\Classes 아래의 명시적인 레지스트리 항목으로 등록을 추가하십시오 (사용자 별 COM 등록을 요구하는 특별한 이유가없는 한 완전히 다른 주제입니다).

0

그래, Franci Penov의 좋은 답변입니다. 옵션으로 당신은 또한

regsvr32 yourdll.dll 
installexecute 순서에 사용자 지정 작업으로

파일이 배포 된 후 제거를 위해 동일 하나를 제외한/U 키 HKCR에

0

등록의 등록을 취소하기 위해 추가 노력 (및 관련 수 매핑 된 하이브)에는 관리자 권한이 필요하며 항상 필요합니다. 이것은 "필자는 XP에서는 Program Files 디렉토리에 쓸 수 있지만 Vista에서는 작성할 수 없다"는 것과 동일한 문제입니다. 왜냐하면 모든 사람이 XP의 관리자 였기 때문에 UAC 이후 아무도 관리자 권한이 없기 때문입니다 (관리자는 공용 관리자로, 다른 관리자는 UAC 권한 상승 프롬프트). 자동 등록

일반적인 이유는 설치시 실패 할 수 있습니다 : 고도의

  1. 부족 (같은 사용자마다 그 결코 UAC 상승 대화 상자를 보여줍니다 설치).

  2. 누락 된 종속성. 당신이 의존하는 DLL이있을 수 있으며 그것은 대상 시스템에 있지 않습니다. 설치가 완료된 후 등록 작업을하면 Win32 또는 관리되는 코드 어셈블리에 종속 될 수 있습니다. WinSxS로 이동하는 C++ 런타임에 종속성이 있고이를 병합 모듈로 포함시킨 경우 설치가 완료되고 등록이 실패 할 때까지 커밋되지 않습니다. GAC에 들어가는 어셈블리에 대해서도 마찬가지지만 Win32 등록의 경우에는 그렇지 않습니다.Windows 7에서 무작위 인 경우는 일반적으로 일부 시스템에 이미 C++ 런타임이 설치되어 있고 일부는 설치되어 있지 않기 때문입니다.

Visual Studio 및 WiX를 비롯한 대부분의 도구는 빌드시 COM 등록 추출이 가능합니다. 그것은 정적 데이터이므로 MSI 파일에있을 이유가 없습니다. WiX의 경우 도구는 열이라고합니다. 또한 종속성 문제를 피하면서 설치시 Dll을 호출 할 필요가 없음을 의미합니다. vsdraCOM 설정은 이것을 수행하고 성공적으로 사용했지만 모든 등록과 마찬가지로 빌드 할 때 종속 DLL이 필요합니다. 작동하는지 확인하는 좋은 방법은 없지만 Windows SDK에서 Orca와 같은 MSI 편집기를 가져 와서 MSI 파일을 열면 클래스 테이블에 클래스가 표시되어야합니다. 레지스트리 테이블.

실제로 "등록하지 않음"에 대한 자세한 내용이 있으면 도움이 될 수도 있습니다. 인터페이스 항목, CLSID 항목, 설치시 오류 메시지, 클래스를 인스턴스화 할 수 없어 실행되지 않는 앱이 누락 되었습니까?

관련 문제