2012-09-17 23 views
8

Próbuję zarejestrować bibliotekę DLL przy użyciu WiX. Teraz wiem i rozumiem, że powinienem użyć heat i pobrać go, aby pobrać informacje rejestru dla mnie, ale upał wydaje się nie działać z następującym komunikatem o błędzie: heat.exe : warning HEAT5150 : Could not harvest data from a file that was expected to be a SelfReg DLL: C:\Users\seb\Desktop\Development\addin.dll. If this file does not support SelfReg you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: Unable to load file: C:\Users\seb\Desktop\Development\addin.dll, error: 193Nie można zarejestrować biblioteki DLL przy użyciu WiX

Rozejrzałem się i znalazłem ten wpis, który wyjaśnia nieco więcej szczegółów na temat registering DLLs, ale jeśli to możliwe, chciałbym uniknąć trasy samo rejestracji. Widzę również wzmiankę o ręcznej rejestracji bibliotek DLL poniżej, ale nie jestem zbyt dobrze zaznajomiony z rejestrami lub obiektami COM, aby wiedzieć, gdzie mogę uzyskać identyfikator CLSID, ProgId i wszelkie inne informacje, o których wspomniano.

Jeśli ktoś może wskazać mi właściwy kierunek lub wytłumaczyć mi, co muszę zrobić, aby uruchomić bibliotekę DLL przez heat, byłoby to bardzo cenne.

Odpowiedz

1

Czy to jest niezarządzana/natywna biblioteka DLL? Czy Dependency Walker pokazuje brakujące zależności? Zwykle oznacza to, że funkcja DllRegisterFunction nie działa, a Heat nie może wyodrębnić żadnych danych. Napraw ten problem i powinieneś uzyskać dobrą meta XML.

+0

Jest to DLL, który został utworzony za pomocą ATL 6.0. Jeśli zadzwonię na Regserv32, wszystko ładuje się dobrze i system rozpoznaje go, ale do tej pory zawsze był ładowany jako SelfReg. – Seb

+0

Tego rodzaju problem jest naprawdę trudny do rozwiązania. Jeśli możesz udostępnić bibliotekę DLL, mogę spróbować wyodrębnić ją dla ciebie. Możesz także użyć narzędzia migawki rejestru na czystym komputerze, aby przechwycić regsvr32, a następnie ręcznie napisać do wx. Lub użyj oceny InstallShield, aby wyodrębnić ciemność COM i WiX, aby dekompilować z powrotem do wx. Mnóstwo sztuczek, ale wymagają doświadczenia. –

+0

Naprawdę nie mogę udostępnić biblioteki DLL, ponieważ jest ona własnością firmy, ale próbowałem używać RegSpy i zostało zamrożone na około 8 godzin. Mam nadzieję, że to tylko próba wyciągnięcia danych. – Seb

0

Wystąpił ten sam problem z Wix heat.exe: ostrzeżenie HEAT5150: Nie można zebrać danych z pliku, który miał być biblioteką DLL SelfReg. Powodem jest, że dll nie może znaleźć zależności od obciążenia. Myślę, że musisz mieć podobne problemy. Uruchomiłem narzędzie Monitora procesu i zastosowałem filtr do przechwytywania zdarzenia heat.exe. Udało mi się znaleźć przyczynę problemu. Zasadniczo musiałem umieścić wszystkie dll zależności w tej samej lokalizacji, gdzie moja główna biblioteka dll była. Dla Twojego przypadku addin.dll musi wskazywać tę samą lokalizację, w której znajdują się twoje zależne biblioteki DLL.

Poniższy blog na temat tego ostrzeżenia pomógł mi znaleźć przyczynę.

http://marc.durdin.net/2009/12/case-of-hidden-exception.html?

+1

Po tym, jak spędziłem prawie dzień, nie mogłem się z tym pogodzić. Błąd pokazany w poście na blogu wspomina o wyjątku wyrzuconym przez cel. W moim przypadku ciepło rzuca wyjątek mówiąc, że plik nie mógł się załadować. Dodałem nawet wszystkie zależności, które pojawiły się w Monitorze procesu. Nadal dostaję błąd. Może utknąłem z samodzielną rejestracją tej biblioteki DLL. – Seb

11

wiem, że to jest stary, ale chciałem dodać odpowiedź tutaj - Powodem takiej sytuacji jest fakt, że dll próbujesz zarejestrować się dll 64 bit - i Heat.exe jest 32-bitowy, więc nie można załadować biblioteki dll w jego przestrzeń adresowa. W każdym razie, po prostu wskaż 32-bitową wersję biblioteki DLL, aby utworzyć plik wxs i nie powinieneś otrzymywać tego błędu.