Używamy WiX już od jakiegoś czasu i pomimo zwykłych problemów związanych z łatwością użycia, wszystko idzie dobrze. To, czego szukam, to przydatne porady dotyczące:
- Konfigurowanie projektu WiX (układ, referencje, wzorce plików)
- Integracja WiX z rozwiązaniami oraz procesy kompilacji / wydania
- Konfigurowanie instalatorów dla nowych instalacji i aktualizacji
- Wszelkie dobre hacki WiX, które chcesz udostępnić
practical, answerable questions based on actual problems that you face
części FAQ.Odpowiedzi:
Zmienne przechowuj w osobnym
wxi
pliku dołączania Umożliwia ponowne użycie, zmienne można szybciej znaleźć i (w razie potrzeby) umożliwia łatwiejszą manipulację przez narzędzie zewnętrzne.Zdefiniuj zmienne platformy dla kompilacji x86 i x64
Zapisz lokalizację instalacji w rejestrze, umożliwiając aktualizacjom znalezienie właściwej lokalizacji. Na przykład, jeśli użytkownik ustawi niestandardowy katalog instalacyjny.
Uwaga : guru WiX Rob Mensching opublikował doskonały wpis na blogu, który zawiera więcej szczegółów i naprawia przypadek krawędzi, gdy właściwości są ustawiane z wiersza poleceń.
Przykłady z wykorzystaniem 1. 2. i 3.
i
Najprostszym podejściem jest zawsze przeprowadzanie poważnych aktualizacji , ponieważ umożliwia zarówno nowe instalacje, jak i aktualizacje w jednym MSI. UpgradeCode jest przypisany do unikalnego Guid i nigdy się nie zmieni, chyba że nie chcemy uaktualnić istniejącego produktu.
Uwaga : W WiX 3.5 jest nowy element MajorUpgrade , który jeszcze bardziej ułatwia życie !
Tworzenie ikony w Dodaj / Usuń programy
W kompilacjach wersji instalujemy nasze instalatory, kopiując plik msi do katalogu wdrażania. Przykładem tego jest użycie celu wixproj wywołanego z celu AfterBuild:
Używaj ciepła do zbierania plików za pomocą symboli wieloznacznych (*) Guid. Przydatne, jeśli chcesz ponownie wykorzystać pliki WXS w wielu projektach (zobacz moją odpowiedź na temat wielu wersji tego samego produktu). Na przykład ten plik wsadowy automatycznie zbiera dane wyjściowe RoboHelp.
Trochę się dzieje,
robocopy
usuwa się metadane kopii roboczej Subversion przed zebraniem;-dr
odniesienie katalog główny jest ustawiony na naszym miejscu instalacji zamiast domyślnej TARGETDIR;-var
służy do tworzenia zmiennej określającej katalog źródłowy (wynik wdrożenia sieciowego).Łatwy sposób umieszczenia wersji produktu w oknie dialogowym powitalnym za pomocą Strings.wxl do lokalizacji. ( Źródło : saschabeaumont . Dodano, ponieważ ta wielka wskazówka jest ukryta w komentarzu)
Oszczędź sobie bólu i postępuj zgodnie z radą Wima Coehena dotyczącą jednego składnika na plik. Pozwala to również pominąć identyfikator GUID komponentu (lub symbol wieloznaczny
*
) .Rob Mensching ma zgrabny sposób szybkiego wyszukiwania problemów w plikach dziennika MSI poprzez wyszukiwanie
value 3
. Zwróć uwagę na komentarze dotyczące internacjonalizacji.Podczas dodawania funkcji warunkowych bardziej intuicyjnie jest ustawić domyślny poziom funkcji na 0 (wyłączony), a następnie ustawić poziom warunku na żądaną wartość. Jeśli ustawisz domyślny poziom funkcji> = 1, poziom warunku musi wynosić 0, aby go wyłączyć, co oznacza, że logika warunku musi być przeciwna do oczekiwanej, co może być mylące :)
źródło
Sprawdzanie, czy IIS jest zainstalowany:
Sprawdzanie, czy w systemie Vista + jest zainstalowana zgodność metabazy IIS 6:
źródło
Wszystkie identyfikatory przechowuj w osobnych przestrzeniach nazw
F.
przykładów: F.Documentation, F.Binaries, F.SampleCode.C.
np .: C.ChmFile, C.ReleaseNotes, C.LicenseFile, C.IniFile, C.RegistryCA.
np .: CA.LaunchHelp, CA.UpdateReadyDlg, CA.SetPropertyXFi.
Di.
Uważam, że to bardzo pomaga w śledzeniu wszystkich różnych identyfikatorów we wszystkich różnych kategoriach.
źródło
Fantastyczne pytanie. Chciałbym zobaczyć niektóre najlepsze praktyki.
Mam wiele plików, które dystrybuuję, więc skonfigurowałem swój projekt w kilku plikach źródłowych wxs.
Mam plik źródłowy najwyższego poziomu, który nazywam Product.wxs, który zasadniczo zawiera strukturę instalacji, ale nie rzeczywiste komponenty. Ten plik ma kilka sekcji:
Reszta plików .wix składa się z fragmentów zawierających grupy składowe, do których odwołuje się znacznik Feature w pliku Product.wxs. Mój projekt zawiera ładne logiczne grupowanie plików, które dystrybuuję
Nie jest to idealne, moje wyczucie pająka OO trochę mrowi, ponieważ fragmenty muszą odwoływać się do nazw w pliku Product.wxs (np. DirectoryRef), ale łatwiej mi utrzymać pojedynczy duży plik źródłowy.
Chciałbym usłyszeć komentarze na ten temat, a jeśli ktoś też ma jakieś dobre wskazówki!
źródło
Dodaj pole wyboru do okna dialogowego wyjścia, aby uruchomić aplikację lub plik pomocy.
...
Jeśli zrobisz to w ten sposób, „standardowy” wygląd nie będzie do końca odpowiedni. Pole wyboru jest zawsze szare tło, a okno dialogowe jest białe:
alt text http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_1.gif
Jednym ze sposobów jest określenie własnego niestandardowego ExitDialog z polem wyboru o innej lokalizacji . Działa to, ale wydaje się, że dużo pracy wymaga tylko zmiany koloru jednego elementu sterującego. Innym sposobem rozwiązania tego samego problemu jest przetworzenie wygenerowanego pliku MSI w celu zmiany pól X, Y w tabeli Control dla tego konkretnego kontrolki CheckBox. Kod javascript wygląda następująco:
Uruchomienie tego kodu jako skryptu wiersza polecenia (przy użyciu cscript.exe) po wygenerowaniu pliku MSI (z light.exe) spowoduje wygenerowanie ExitDialog, który wygląda bardziej profesjonalnie:
alt text http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_2.gif
źródło
WIXUI_EXITDIALOGOPTIONALCHECKBOX
zWIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
wewnątrz<Publish>
Tworzenie wersji Live, Test, Training, ... przy użyciu tych samych plików źródłowych.
W skrócie: utwórz unikalny kod aktualizacji dla każdego instalatora i automatycznie zdefiniuj pierwszy znak każdego przewodnika dla każdego instalatora, pozostawiając pozostałe 31 unikalnych.
Wymagania wstępne
Założenia
Struktura katalogów
Proces
Przykład Config.wxi
Przykład Config.Common.wxi
Przykład Components.wxs
Uwaga: sugerowałbym teraz pozostawienie atrybutu Guid poza Komponentem (odpowiednik
*
), użycie jednego pliku na komponent i ustawienie pliku jako ścieżki klucza. Eliminuje to potrzebę wywoływaniaModifyComponentsGuids
iRevertComponentsGuids
celów pokazanych poniżej. Może to nie być możliwe w przypadku wszystkich komponentów.Przykład Setup.Live.wixproj
Końcowe przemyślenia
AKTUALIZACJA 1: Automatyczne generowanie Guids komponentu eliminuje potrzebę wywoływania zadania FileUpdate, jeśli tworzysz komponent z Guid = „*” dla każdego pliku, ustawiając plik jako ścieżkę do klucza.
AKTUALIZACJA 2: Jednym z problemów, z którymi się zetknęliśmy, jest to, że jeśli nie wygenerujesz automatycznie swojego komponentu Guid, a kompilacja się nie powiedzie, pliki tymczasowe należy ręcznie usunąć.AKTUALIZACJA 3: Znaleziono sposób na usunięcie zależności od svn: externals i tworzenia plików tymczasowych. To sprawia, że proces kompilacji jest bardziej odporny (i jest najlepszą opcją, jeśli nie możesz użyć symboli zastępczych w swoich przewodnikach) i mniej kruchy, jeśli kompilacja zakończy się niepowodzeniem w świetle lub świecy.
AKTUALIZACJA 4: Obsługa wielu instancji za pomocą transformacji instancji jest dostępna w WiX 3.0+, na pewno również warto ją sprawdzić.
źródło
Korzystanie z rejestrowania diagnostycznego Msi w celu uzyskania szczegółowych informacji o awarii
msiexec /i Package.msi /l*v c:\Package.log
Gdzie
to nazwa twojego pakietu i to miejsce, w którym chcesz uzyskać wynik dziennikaKody błędów Msi
Wideo wprowadzające Wix Wideo wprowadzające
Oh i Random Wix przedstawiające Roba Menschinga „Mr. WiX” jest „koncepcyjnym dużym obrazem”.
źródło
Użyj Javascript CustomActions, ponieważ są one takie proste
Ludzie mówili, że JavaScript jest niewłaściwą rzeczą do użycia w MSI CustomActions . Podane powody: trudne do debugowania, trudne do zapewnienia niezawodności. Nie zgadzam się Debugowanie nie jest trudne, a na pewno nie trudniejsze niż C ++. Po prostu jest inaczej. Zauważyłem, że pisanie CustomActions w Javascripcie jest bardzo łatwe, o wiele łatwiejsze niż używanie C ++. O wiele szybciej. I tak samo niezawodny.
Jest tylko jedna wada: JavaScript CustomActions można wyodrębnić za pośrednictwem Orca, podczas gdy CA / C ++ CA wymagałoby inżynierii wstecznej. Jeśli uważasz, że twoja magia instalatora jest chronioną własnością intelektualną, będziesz chciał uniknąć skryptu.
Jeśli używasz skryptu, musisz zacząć od jakiejś struktury. Oto niektóre na początek.
Kod „płyty grzewczej” JavaScript dla CustomAction:
Następnie zarejestruj niestandardową akcję za pomocą czegoś takiego:
Możesz oczywiście wstawić tyle funkcji Javascript, ile chcesz, dla wielu niestandardowych działań. Jeden przykład: użyłem Javascript, aby wykonać kwerendę WMI w IIS, aby uzyskać listę istniejących stron internetowych, na których można zainstalować filtr ISAPI. Ta lista została następnie wykorzystana do wypełnienia pola listy pokazanego później w sekwencji interfejsu użytkownika. Wszystko bardzo łatwe.
W IIS7 nie ma dostawcy WMI dla IIS, więc skorzystałem z tej
shell.Run()
metody, aby wywołać appcmd.exe w celu wykonania pracy. Łatwo.Powiązane pytanie: o JavaScript CustomActions
źródło
Peter Tate już pokazał, jak można definiować definicje ComponentGroup wielokrotnego użytku w osobnych fragmentach wix. Kilka dodatkowych sztuczek związanych z tym:
Aliasing katalogów
Fragmenty grup komponentów nie muszą wiedzieć o katalogach zdefiniowanych przez wxs głównego produktu. W swoim fragmencie grupy komponentów możesz mówić o takim folderze:
Następnie główny produkt może aliasować jeden ze swoich katalogów (np. „ProductInstallFolder”) w następujący sposób:
Wykres zależności
Elementy ComponentGroup mogą zawierać elementy potomne ComponentGroupRef. Jest to świetne, jeśli masz dużą pulę komponentów wielokrotnego użytku ze złożonym wykresem zależności między nimi. Po prostu ustawiłeś ComponentGroup we własnym fragmencie dla każdego komponentu i zadeklarowałeś takie zależności:
Jeśli teraz odwołujesz się do grupy komponentów „B” w konfiguracji, ponieważ jest to bezpośrednia zależność twojej aplikacji, automatycznie pobierze grupę komponentów „A”, nawet jeśli autor aplikacji nigdy nie zorientował się, że była to zależność „B”. „Po prostu działa”, o ile nie ma żadnych zależności cyklicznych.
Wixlib wielokrotnego użytku
Powyższa idea wykresu zależności działa najlepiej, jeśli skompilujesz komponenty typu big-pool-o-wielokrotnego użytku w wixlib wielokrotnego użytku z lit.exe. Podczas tworzenia konfiguracji aplikacji możesz odwoływać się do tego wixlib podobnie jak plik wixobj. Linker candle.exe automatycznie eliminuje wszelkie fragmenty, które nie są „wciągane” przez pliki wxs głównego produktu.
źródło
Dziwię się, że nikt nie wspomniał o użyciu T4 do generowania pliku WXS podczas kompilacji. Dowiedziałem się o tym dzięki Henry Lee @ New Age Solutions .
Zasadniczo tworzysz niestandardowe zadanie MSBuild w celu wykonania szablonu T4, który wysyła WXS tuż przed kompilacją projektu Wix. Pozwala to na (w zależności od sposobu jego implementacji) automatyczne dołączanie wszystkich danych wyjściowych zestawów podczas kompilowania innego rozwiązania (co oznacza, że nie musisz już edytować pliku wxs za każdym razem, gdy dodajesz nowy zestaw).
źródło
Użycie Heat.exe do rozbicia twarzy i spowodowania „Epic Pwnage” w boleśnie dużych instalacjach
Rozwijanie odpowiedzi Si i Roberta-P na temat ciepła.
Tłumaczenie: (Używanie ciepła, aby uniknąć ręcznego wpisywania poszczególnych plików do projektu i do automatyzacji kompilacji dla ogólnego łatwiejszego procesu.)
Szczegółowa składnia ciepła WiX 2.0
W przypadku nowszych wersji (nie wszystko różni się od starszych wersji, ale istnieją potencjalnie denerwujące zmiany składni ....) przejdź do katalogu Ciepło pochodzi z cmd.exe i po prostu wpisz ciepło, ale mam tutaj przykład, aby uzyskać pomoc w razie potrzeby z nowszymi wersjami.
Dodanie następujących elementów do zdarzenia budowania w Visual Studio 2010.
(Kliknij prawym przyciskiem myszy Projekt-> Właściwości -> Zdarzenia kompilacji-> Zdarzenia przed kompilacją)
$(WIX)bin\heat.exe" dir "$(EnviromentVariable)" -cg GroupVariable -gg -scom -sreg -sfrag - srd -dr INSTALLLOCATION -var env.LogicPath -out "$(FragmentDir)\FileName.wxs
Generuje prowadnice po uruchomieniu ciepła (jak w przypadku wykonania powyższego polecenia)
Nie chwytaj „plików COM”
Nie chwytaj „plików rejestru”
Nie chwytaj „Fragmentów”
Nie chwytaj „katalogu głównego”
katalog wskazuje, że chcesz, aby Heat szukał w folderze
Nazwa zmiennej, którą chcesz dodać do zmiennych Preprocesora we właściwościach projektu (Kliknij prawym przyciskiem myszy, Idź do właściwości) -> Kompilacja, w której jest napisane Zdefiniuj zmienne preprocesora (zakłada Visual Studio 2010)
Bez podwójnych cudzysłowów, ale zakończone średnikiemComponentGroup, do której nastąpi odwołanie z utworzonego fragmentu do głównego pliku wxs
Katalog fragmentów, w którym będzie przechowywany wyjściowy fragment wxs
Nazwa pliku
Pełny samouczek tutaj, więc cholernie pomocny
Część 1 Część 2
źródło
W tym obiekty COM:
heat
generuje wszystkie najbardziej (jeśli nie wszystkie) wpisy rejestru i inną potrzebną dla nich konfigurację. Cieszyć!W tym zarządzane obiekty COM (znane również jako obiekty .NET lub C # COM)
Użycie
heat
na zarządzanym obiekcie COM da ci prawie kompletny dokument wix.Jeśli nie potrzebujesz biblioteki dostępnej w GAC (tj. Globalnie dostępnej: W większości przypadków nie potrzebujesz tego z zestawami .NET - prawdopodobnie zrobiłeś w tym momencie coś złego, jeśli nie jest to zamierzone biblioteka współdzielona), należy się upewnić, że
CodeBase
klucz rejestru został zaktualizowany[#ComponentName]
. Jeśli planujesz zainstalować go w GAC (np. Masz nową niesamowitą wspólną bibliotekę, z której wszyscy będą chcieli korzystać), musisz usunąć ten wpis i dodać dwa nowe atrybuty doFile
elementu:Assembly
iKeyPath
. Zestaw powinien być ustawiony na „.net” iKeyPath
powinien być ustawiony na „tak”.Jednak niektóre środowiska (zwłaszcza wszystko z pamięcią zarządzaną, takie jak języki skryptowe) również będą potrzebować dostępu do Typelib. Pamiętaj, aby uruchomić
heat
na swoim typelibie i dołączyć go.heat
wygeneruje wszystkie potrzebne klucze rejestru. Jakie to jest świetne?źródło
Instalowanie do
C:\ProductName
Niektóre aplikacje muszą być zainstalowane
C:\ProductName
lub coś podobnego, ale 99,9% (jeśli nie 100%) przykładów w sieci instaluje sięC:\Program Files\CompanyName\ProductName
.Poniższego kodu można użyć do ustawienia
TARGETDIR
właściwości katalogu głównegoC:
dysku (pobranego z listy użytkowników WiX ):UWAGA: Domyślnie
TARGETDIR
nie wskazujeC:\
! Wskazuje raczej,ROOTDRIVE
który z kolei wskazuje na rdzeń dysku z największą ilością wolnego miejsca ( patrz tutaj ) - i niekoniecznie jest toC:
dysk. Może być inny dysk twardy, partycja lub dysk USB!Następnie, gdzieś poniżej
<Product ...>
tagu, potrzebujesz następujących tagów katalogu, jak zwykle:źródło
WindowsVolume
?WindowsVolume
właściwość nie może być używana jakoDirectory
(kompilator podaje błąd / ostrzeżenie), jak wskazano tutaj i tutaj . Osobiście uważam, że to obejście jest mylące.Zmienne środowiskowe
Podczas kompilowania dokumentów Wxs do kodu wixobj możesz użyć zmiennych środowiskowych do ustalenia różnych informacji. Załóżmy na przykład, że chcesz zmienić, które pliki zostaną uwzględnione w projekcie. Załóżmy, że masz zmienną środowiskową o nazwie RELEASE_MODE, którą ustawiłeś tuż przed zbudowaniem MSI (albo za pomocą skryptu, albo ręcznie, to nie ma znaczenia). W źródle wix możesz zrobić coś takiego:
a następnie w kodzie użyj go w miejscu, aby w locie zmienić dokument wxs, np .:
źródło
Używając specjalnego RobM „Pamiętaj Property” wzór
http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern
źródło
Tworzenie niestandardowej akcji dla WIX napisanej w kodzie zarządzanym (C #) bez Votive
http://www.codeproject.com/KB/install/wixcustomaction.aspx
źródło
Edycja okien dialogowych
Jedną z dobrych możliwości edycji okien dialogowych jest korzystanie z SharpDevelop w wersji 4.0.1.7090 (lub wyższej). Za pomocą tego narzędzia można otworzyć, wyświetlić podgląd i edytować samodzielne okno dialogowe (pliki wxs ze źródeł WiX, np. InstallDirDlg.wxs).
źródło
Ustawianie flagi enable32BitAppOnWin64 usług IIS http://trycatchfail.com/blog/post/WiX-Snippet-change-enable32BitAppOnWin64.aspx
źródło
Zmodyfikuj „Gotowy do instalacji?” okno dialogowe (inaczej VerifyReadyDlg), aby zapewnić podsumowanie dokonanych wyborów.
Wygląda to tak:
alt text http://i46.tinypic.com/s4th7t.jpg
Zrób to za pomocą JavaScript CustomAction:
Kod JavaScript:
Zadeklaruj urząd certyfikacji JavaScript:
Dołącz urząd certyfikacji do przycisku. W tym przykładzie urząd certyfikacji jest uruchamiany po kliknięciu przycisku Dalej w oknie CustomizeDlg:
Powiązane pytanie SO: Jak ustawić w czasie wykonywania tekst do wyświetlenia w VerifyReadyDlg?
źródło
Umieść Komponenty, które mogą być załatane indywidualnie w ich własnych Fragmentach
Dotyczy to zarówno tworzenia instalatorów produktu, jak i poprawek, że jeśli dołączasz dowolny fragment do fragmentu, musisz uwzględnić wszystkie komponenty w tym fragmencie. W przypadku budowania instalatora, jeśli przegapisz jakieś odniesienia do komponentów, otrzymasz błąd połączenia z light.exe. Jeśli jednak utworzysz łatkę, jeśli do fragmentu dodasz odniesienie do jednego komponentu, wszystkie zmienione komponenty z tego fragmentu pojawią się w łatce.
lubię to:
zamiast tego:
Ponadto podczas łatania za pomocą tematu „Korzystanie z czysto WiX” z pliku pomocy WiX.chm, korzystając z tej procedury, aby wygenerować poprawkę:
nie wystarczy mieć wersję 1.1 produktu .wixpdb zbudowaną z komponentów w osobnych fragmentach. Pamiętaj więc o prawidłowym rozdrobnieniu produktu przed wysyłką.
źródło
Drukowanie umowy EULA z Wix3.0 i nowszych
1) Podczas kompilowania kodu źródłowego wix plik light.exe musi odwoływać się do pliku WixUIExtension.dll w wierszu polecenia. Użyj do tego przełącznika-wiersza poleceń.
2) Jeśli po dodaniu odwołania do pliku WixUIExtension.dll projekt nie zostanie skompilowany, jest to najprawdopodobniej z powodu kolizji identyfikatorów okien dialogowych, tj. Projekt używał tych samych identyfikatorów okien dialogowych, co niektóre standardowe okna dialogowe w pliku WixUIExtension.dll, podaj różne identyfikatory do swoich okien dialogowych. To dość powszechny problem.
3) Twoje okno dialogowe licencji musi mieć kontrolę ScrollableText o identyfikatorze „LicenseText”. Wix szuka dokładnie tej nazwy kontrolki podczas drukowania.
i PushButton, który odnosi się do akcji niestandardowej
4) Zdefiniuj CustomAction za pomocą Id = „PrintEula” w następujący sposób:
Uwaga: BinaryKey różni się w Wix3.0 w porównaniu do Wix2.0 i musi być dokładnie „WixUIWixca” (z rozróżnianiem wielkości liter).
Gdy użytkownik naciśnie przycisk, zostanie wyświetlony standardowy dialog Wybierz drukarkę i będzie można z niego drukować.
źródło
Wyświetlamy wersję produktu gdzieś (małą) na pierwszym ekranie GUI. Ponieważ ludzie za każdym razem popełniają błędy przy wyborze odpowiedniej wersji. (I każ nam programistom szukać wieków ..)
Skonfigurowaliśmy TFSBuild, aby generował również transformacje (pliki .mst) z konfiguracją dla naszych różnych środowisk. (Wiemy o wszystkich środowiskach, w których musimy wdrożyć).
Ponieważ oryginalny post na blogu autorstwa Granta Hollidaya nie działa, skopiowałem jego treść tutaj:
Zadanie MSBuild do generowania plików MSI Transform z XMLMarch 11 2008
W poprzednim poście opisałem, jak używać plików MSI Transform (* .mst) do oddzielania ustawień konfiguracji specyficznych dla środowiska od ogólnego pakietu MSI.
Chociaż zapewnia to pewien poziom elastyczności konfiguracji, istnieją dwa minusy plików transformacji:
Na szczęście możemy używać biblioteki obiektów Microsoft Windows Installer Object Library (c: windowssystem32msi.dll) do otwierania „baz danych” MSI i tworzenia plików transformacji.
Podziękowania należą się ponownie Alexowi Szewczukowi - od MSI do WiX - Część 7 - Dostosowywanie instalacji za pomocą Transforms, aby pokazać nam, jak to osiągnąć za pomocą VbScript. Zasadniczo wszystko, co zrobiłem, to przykład Alexa i za pomocą Interop.WindowsInstaller.dll zaimplementowałem zadanie MSBuild. Zadanie MSBuild
Pobierz kod źródłowy i przykładowe transforms.xml tutaj (~ 7 KB Spakowane rozwiązanie VS2008)
źródło
Przed wdrożeniem pakietu instalacyjnego zawsze kontroluję jego zawartość.
To tylko proste wywołanie w linii poleceń (zgodnie z postem Terrencesa) otwórz linię poleceń i wciśnij
Spowoduje to wyodrębnienie zawartości pakietu do podkatalogu „Wyodrębnij” z bieżącą ścieżką.
źródło
Zamiast ORCA użyj InstEd, który jest dobrym narzędziem do przeglądania tabel MSI. Ma także możliwość różnicowania dwóch pakietów według Transform -> Porównaj z ...
Dodatkowo dostępna jest wersja Plus z dodatkową funkcjonalnością. Ale również darmowa wersja stanowi dobrą alternatywę dla Orca.
źródło
Rejestrowanie zestawów .NET dla COM Interop ze zgodnością x86 / x64
Uwaga: Ten fragment jest zasadniczo taki sam jak REGASM Assembly.dll / codebase
W tym przykładzie dzieje się kilka rzeczy, więc oto kod, a wyjaśnię go później ...
Jeśli zastanawiasz się, tak naprawdę jest to dla sterownika teleskopu ASCOM .
Po pierwsze, skorzystałem z porady powyżej i stworzyłem niektóre zmienne platformy w osobnym pliku, możesz zobaczyć te rozproszone przez XML.
Część if-then-else u góry dotyczy zgodności x86 vs x64. Mój zestaw celuje w „Dowolny procesor”, więc w systemie x64 muszę go zarejestrować dwukrotnie, raz w rejestrze 64-bitowym i raz w
Wow6432Node
obszarach 32-bitowych . Jeśli-to-else mnie do tego skonfiguruje, wartości sąforeach
później używane w pętli. W ten sposób muszę tylko raz utworzyć klucze rejestru (zasada DRY).Element pliku określa faktyczną bibliotekę DLL instalowaną i rejestrowaną:
Nic rewolucyjnego, ale zauważ
Assembly=".net"
- ten atrybut sam w sobie spowodowałby, że asembler zostałby umieszczony w GAC, co NIE jest tym, czego chciałem. Użycie tegoAssemblyApplication
atrybutu, aby wskazywać na siebie, jest po prostu sposobem na powstrzymanie Wix przed umieszczeniem pliku w GAC. Teraz, gdy Wix wie, że jest to zestaw .net, pozwala mi używać pewnych zmiennych wiążących w moim pliku XML, takich jak,!(bind.assemblyFullname.filDriverAssembly)
aby uzyskać pełną nazwę zestawu.źródło
Ustaw
DISABLEADVTSHORTCUTS
właściwość, aby wymusić, aby wszystkie reklamowane skróty w instalatorze stały się zwykłymi skrótami i nie musisz dołączać fałszywego klucza reg, który będzie używany jako ścieżka.Myślę, że wymagany jest Instalator Windows 4.0 lub nowszy .
źródło
To ładna struktura, ale w oparciu o moje doświadczenie zastanawiam się, jak radzisz sobie z tymi warunkami:
A. Wszystkie instalacje wydają się lądować w tym samym miejscu docelowym. Jeśli użytkownik musi zainstalować wszystkie 3 wersje jednocześnie, proces na to pozwoli. Czy potrafią jednoznacznie stwierdzić, którą wersję każdego pliku wykonywalnego uruchamiają?
B. Jak postępujesz z nowymi plikami, które istnieją w TESTIE i / lub SZKOLENIU, ale jeszcze nie w LIVE?
źródło
Oto sposób, aby pomóc dużym projektom internetowym zweryfikować, czy liczba wdrożonych plików odpowiada liczbie plików wbudowanych w MSI (lub moduł scalający). Właśnie uruchomiłem niestandardowe zadanie MSBuild na naszej głównej aplikacji (wciąż w fazie rozwoju) i wykryło sporo brakujących plików, głównie obrazów, ale kilka plików javascript przeszło do!
Takie podejście (zaglądanie do tabeli plików MSI poprzez podpięcie się do celu AfterBuild projektu WiX) może działać dla innych typów aplikacji, w których masz dostęp do pełnej listy oczekiwanych plików.
źródło
Przeprowadzanie wymuszonej ponownej instalacji, gdy instalacja nie pozwala na odinstalowanie lub ponowną instalację i nie przywraca.
Skrypt VBscript używany do zastępowania instalacji, która nie odinstalowuje się z jakiegokolwiek powodu.
źródło
Utwórz interfejs użytkownika, który ma akcję niestandardową, która ustawi zmienną, a interfejs użytkownika wyłączy / włączy następny przycisk (lub podobny) na podstawie zmiennej ustawionej w akcji niestandardowej.
Nie tak proste, jak mogłoby się wydawać, nie jest zbyt trudne, po prostu nigdzie nie udokumentowane!
Interakcje Wix z warunkami, właściwościami i niestandardowymi akcjami
źródło