2012-05-09 8 views
8

자가 등록하지 않으 셨습니다. 그러면 WIX를 사용하여 설치하는 동안 COM dll 등록을 어떻게 수행합니까?com dll을 윅스에 등록 하시려면

tutorial에 따라 ComPlusApplication 예제 (비 .net dll)를 사용했습니다. 그러나 그것은 작동하지 않습니다. 등록에 실패했습니다.

명령 줄에서 regsvr32를 사용하여 성공적으로 등록 할 수 있습니다. com dll 등록을위한 사용자 지정 작업을 만들지 않는 것에 대해 읽었습니다.

그래서 가장 좋은 방법은 무엇입니까? 열을 사용해야 할 경우 명령을 어디에 쓰고 결과 wxs를 기본 프로젝트에 추가합니까?

+0

등록 방법을 요청했지만 COM 구성 요소를 등록하지 않을 수도 있습니다. 등록 무료 COM 모델을 사용하면 레지스트리를 전혀 건드리지 않고 COM DLL을 사용할 수 있습니다. 참조 : http://msdn.microsoft.com/en-us/library/ms973913.aspx – harper

답변

17

나는 것 강하게 COM 구성 요소를 등록하는 데 필요한 모든 데이터를 수확하기 위해 윅스 도구 Heat.exe를 사용하는 것이 좋습니다 다음과 같이 파일을 당신의 .wxs의 조각을 참조 :

<ComponentGroupRef Id="FooBar.dll" /> 

또는에 포함 당신의 .wxs는 다음과 같이 파일 :

<?include FooBar.dll.wxi?> 

이 방법은 당신에게/등록 취소 COM 구성 요소의 등록 동안 무슨 일을 완벽하게 제어 할 수 있습니다.

그러나 Regsvr32는 여전히 Wix 프로젝트에서 사용할 수 있습니다. 그러나

<CustomAction Id="RegisterFooBar" 
        Directory="INSTALLDIR" 
        ExeCommand='regsvr32.exe /s "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction> 
    <CustomAction Id="UnregisterFooBar" 
        Directory="INSTALLDIR" 
        ExeCommand='regsvr32.exe /s /u "[INSTALLDIR]FooBar.dll"'> 
    </CustomAction> 

그런 다음 설치 순서에 작업을 추가 COM 구성 요소의 RegisterServer/UnregisterServer 기능의 올바른 구현에 의존합니다.

<InstallExecuteSequence> 
     <Custom Action="RegisterFooBar" After="InstallFinalize">NOT Installed</Custom> 
     <Custom Action="UnregisterFooBar" After="InstallFinalize">REMOVE="ALL"</Custom> 
    </InstallExecuteSequence> 
+0

생성 도구로 열 도구를 사용하여 출력을 내 .wxs 파일에 복사했습니다. – rakheep

+0

@rakheep : 유용한 답변을 찾으신다면 upvote하십시오. 하나 이상의 정답을 받으면 가장 적합한 답변을 대답으로 선택하십시오. – JOG

+0

위의 게시물에서 unregister 명령이 누락 된 것 같습니다. 또한 특정 dll에 대한 열을 사용하여 레지스트리 정보를 추출 할 수 없을 때이 방법을 사용해야했습니다. 특정 프로젝트에서 1을 제외하고 모두 작업했습니다. –

2

heat.exe 프로그램을 사용하고 wix 코드에서 조각을 참조 할 수 있습니다.

-out와 마찬가지로

heat.exe 파일 -gg :

heat.exe 파일 my.dll -gg -out my.wxs

시. -gg 스위치를 추가하면 guid가 생성되고, 수동으로 추가하려면 guids를 건너 뛸 수 있습니다.