2009-03-31 11 views
5

Mam wspólną bibliotekę DLL, nazwać go Utility.dll, który jest instalowany przez wiele produktów. W moim pliku WIX instaluję Utility.dll jako oddzielny komponent. Teraz wersja 2.0 pliku Utility.dll odwołuje się do dodatkowej biblioteki DLL, UtilityUtility.dll, która będzie musiała zostać zainstalowana obok.WIX dodać nowy plik do składnika współużytkowanego

Do mojej pierwszej próby integracji z UtilityUtility.dll stworzyłem nowy komponent WIX zawierający nową bibliotekę dll.

powoduje to problemy w następujący scenariusz

1) użytkownik instaluje produkt 1 {Utility.dll 1,0}
2), użytkownik instaluje produkt 2 {Utility.dll 2,0 UtilityUtility.dll 2,0}
3) użytkownik odinstalowuje produkt 2 {Utility.dll 2,0}

teraz, gdy użytkownik korzysta z Utility.dll nie powiedzie się, gdy nie można znaleźć odwołuje UtilityUtility.dll

to doprowadziło mnie do dodać do UtilityUtility.dll oryginalny komponent, który zapobiega Ut ilityUtility.dll został usunięty w poprzednim scenariuszu, ale zawiera własny problem.

1) użytkownik instaluje produkt 1 {Utility.dll 1,0}
2), użytkownik instaluje produkt 2 {Utility.dll UtilityUtility.dll 2.0, 2.0}
3) Użytkownik Odinstalowuje produktu 2 {Utility.dll 2,0 UtilityUtility .dll 2,0}
4) Użytkownik odinstaluje Produkt 1 {UtilityUtility.dll 2,0}

UtilityUtility.dll jest osierocona, ponieważ nie zostaną usunięte przez produkt 1 deinstalacji (nie istnieje w składniku gdy było pierwotnie zainstalowany).

Czy mam tu jakieś inne opcje?

Dzięki

Odpowiedz

3

Jeśli nie możesz zaktualizować Produktu 1 (co, jak zakładam, nie jest całkowicie możliwe), myślę, że jesteś spieprzony. IMHO, Reguły składników są najgorszą rzeczą w Instalatorze Windows. Ten link to an old blog post of mine podsumowuje większość z tego. Twoja sprawa jest nieco inna niż opisana, ale oczekuje się wyników.

Myślę, że możesz wybrać mniejsze zło.

+0

W pierwszym scenariuszu ponowna instalacja/naprawa produktu 1 po unistall produktu 2 przy użyciu REINSTALLMODE = a (lub amus) naprawi sytuację? Mam nieco podobny projekt testowy i wygląda na to, że naprawa zastępuje bibliotekę DLL v2 za pomocą v1 –

+0

Tak, naprawa produktu 1 za pomocą REINSTALLMODE = a wymusiłaby wszystkie pliki w tym pakiecie na komputerze, potencjalnie powodując łamanie innych udostępnianych plików. "a" to bardzo brutalny młot do huśtania. –

+3

Post Rob odnosi się do Reguł Komponentowych, jak sądzę, przeniósł się do http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101 – adamjcooper

0

Czy możesz powtórzyć drugi numer? Teoretycznie po zainstalowaniu wersja komponentu produktu 2 staje się wersją 2.0. Po kroku 3 wersja komponentu nadal wynosi 2.0. Gdy użytkownik odinstalowuje produkt 1 w kroku 4, Instalator systemu Windows wie, jak usunąć zarówno plik Utility.dll 2.0, jak i plik UtilityUtility.dll 2.0.

Aktualizacja: Myliłem się, przepraszam.

+0

@Pavel nie ma czegoś takiego jak "wersja składnika" w Instalatorze Windows. Opisane powyżej zachowanie jest tym, czego oczekiwałbym. –

+0

Mam repro. – user38309

1

Nie jestem w 100% pewny ... ale myślę, że dodanie drugiego .DLL do oryginalnego komponentu jest prawdopodobnie "naruszeniem" reguł komponentu. Spójrz na: http://blogs.msdn.com/robmen/archive/2003/10/18/56497.aspx

Z tego, co zbieram z tłumu Wix, wiodącą "najlepszą praktyką" jest posiadanie każdego pliku jako indywidualnego komponentu.

Jakie są twoje plany na uaktualnienia (w kategoriach msi: dur, minor, patch)? Jeśli dobrze pamiętam, pomniejsze uaktualnienia nie mogą się pozbyć z definicjami komponentów. Nie mam pojęcia o łatkach.

Możesz również chcieć się martwić o naprawę.

+0

Chciałbym mieć drugą bibliotekę DLL we własnym komponencie, ale muszę uniemożliwić jej usunięcie w pierwszym kroku 3 scenariusza. Mam zamiar zrobić duże ulepszenia. – user38309

+0

@isummergoat: Myślę, że możesz wtedy nie mieć szczęścia (zobacz komentarz Rob Menshinga). Możesz chcieć zapytać na liście mailingowej wix ... są zwykle pomocni i mają dużą wiedzę na temat instalatora systemu Windows (nie jest to tak naprawdę pytanie wix ... ale pytanie instalatora systemu Windows). – user53794

0

Sam wpadłem na ten problem. Zgadzam się z @rbobby i dodatkowo stwierdzam, że fakt, że można wyobrazić ten zepsuty scenariusz użytkownika, jest dowodem na to, że naruszasz zasady. Należy zaktualizować tylko składnik udostępniony, jeśli jest w pełni i całkowicie zgodny. Jeśli Duck 2.0 nie znudzi się ani nie popłynie, wymyśl nową nazwę.

W twoim przypadku masz Utility.dll 1.0 i Utility.dll 2.0, ale są one tylko "tym samym elementem", ponieważ robią podobne rzeczy w inny sposób. Utility.dll 2.0 powinien naprawdę nazywać się UtilityPlus.dll 1.0.

Przepraszam, wiem, że to prawdopodobnie nie jest odpowiedź, którą chciałeś usłyszeć, ale przypadek inżynierii jest jasny.

Powiązane problemy