2012-05-09 12 views
8

Jeśli nie dokonujesz rejestracji. to w jaki sposób przeprowadzamy rejestrację dll COM podczas instalacji za pomocą WIX?rejestracja com dll w wix

Zgodnie z tutorial użyłem przykładu ComPlusApplication (nie .net dll). Ale nie działa. Nie udało się zarejestrować.

Mogę zarejestrować się przy użyciu polecenia regsvr32 z wiersza poleceń. Czytam o tym, że nie tworzymy niestandardowych akcji do rejestrowania bibliotek.

SO jakie jest najlepsze podejście? Jeśli potrzebujemy ciepła, gdzie piszemy komendy i dodajemy wynikowe wx do głównego projektu?

+0

Mimo że poprosiłeś o sposób rejestracji, możesz rozważyć, że nie zarejestrujesz składników COM. Modele COM bez rejestracji umożliwiają korzystanie z bibliotek DLL COM bez konieczności dotykania rejestru. Zobacz: http://msdn.microsoft.com/en-us/library/ms973913.aspx – harper

Odpowiedz

17

Gorąco polecam za pomocą Wix narzędzia Heat.exe zebrać wszystkie dane potrzebne do zarejestrowania składnika COM, a następnie odwołać się do fragmentu w swoim .wxs złożyć tak:

<ComponentGroupRef Id="FooBar.dll" /> 

lub zawierają go w złożyć wasze .wxs tak:

<?include FooBar.dll.wxi?> 

ta metoda daje pełną kontrolę nad tym, co dzieje się w trakcie rejestracji/wyrejestrowania komponentu COM.

Możesz jednak nadal używać Regsvr32 w projekcie Wix. Ale to zależy od prawidłowej realizacji funkcji RegisterServer/UnregisterServer w komponencie COM

<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> 

Następnie dodać działanie do sekwencji instalacji.

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

Użyłem narzędzia do generowania ciepła, a następnie skopiowałem dane wyjściowe do pliku .wxs. – rakheep

+0

@rakheep: Jeśli odpowiedź na to pytanie okaże się przydatna, prosimy ją przesłuchać. Po otrzymaniu jednej lub więcej poprawnych odpowiedzi wybierz najlepszą odpowiedź jako odpowiedź. – JOG

+0

Wygląda na to, że w Twoim wpisie brakuje polecenia wyrejestrowania. Również musiałem użyć tej metody, gdy nie mogłem wyodrębnić informacji rejestru przy użyciu ciepła dla 1 konkretnej biblioteki DLL. Pracował dla wszystkich oprócz 1 w danym projekcie. –

2

Można spróbować użyć programu heat.exe, a następnie odwołać się do fragmentu kodu wix.

plik heat.exe -gg wymeldowanie

Jak w:

plik heat.exe my.dll -gg wymeldowanie my.wxs

Ps. Dodanie przełącznika -gg spowoduje wygenerowanie przewodników, w przeciwnym razie można go pominąć, jeśli chcesz je ręcznie dodać.

Powiązane problemy