Winbot – prosty instalator aplikacji desktopowej

W końcu nadszedł ten moment. Uznałem, że moja aplikacja WPF jest już na tyle rozwinięta, że warto by przygotować dla niej jakiś prosty instalator. Robiłem to już w przeszłości w innych projektach, więc miałem już dość wyrobiony pogląd na ten temat. Postanowiłem użyć produktu, który jak do tej pory, nigdy mnie nie zawiódł i pozwalał dostosować instalator do konkretnych wymagań. Chodzi tu o WiX Toolset. Jest to darmowe narzędzie umożliwiające tworzenie instalatorów w oparciu o konfigurację zapisaną w odpowiednich plikach bazujących na XML. W dzisiejszym poście przedstawię krótką instrukcję na zbudowanie instalatora do aplikacji WPF za pomocą WiX’a. Produkt końcowy spełnia następujące założenia:

  • instalator stanowi pojedynczy i niezależny plik .msi,
  • nowa wersja instalatora nadpisuje starszą, jeżeli była wcześniej zainstalowana,
  • instalacja spowoduje dodanie programu do Menu i utworzenie skrótu na pulpicie,
  • możliwość wyboru docelowej ścieżki na dysku podczas instalacji,
  • wyświetlenie odpowiedniej licencji produktu.
  1. Krok pierwszy to oczywiście instalacja WiX’a na naszej maszynie. Narzędzie możemy pobrać z tej strony (w trakcie pisania posta zalecana była wersja 3.11 RC2). Dodatkowo należy zainstalować rozszerzenie do Visual Studio, co znacznie ułatwi całą pracę (dostępne do pobrania z tej samej strony).
  2. Uruchamiamy Visual Studio, otwieramy naszą solucję (zakładam, że projekt naszej aplikacji już istnieje), dodajemy nowy projekt „Setup Project”.
  3. W naszej solucji powinien pojawić się nowy projekt a w nim plik Product.wxs. Ten plik będzie głównym obiektem naszych prac. Jego początkowy stan wygląda mniej więcej tak:
  4. Dodajemy do referencji projekt z docelową aplikacją.
  5. Definiujemy zmienną, która wskazuje na docelowy katalog projektu dodanego w punkcie 4.
  6. W miejscu wskazanym przez komentarz dodajemy wszystkie komponenty, które będą kopiowane podczas instalacji do docelowej ścieżki.

    Jest to chyba najbardziej żmudny i dość uciążliwy krok. Na szczęście istnieje niezależny dodatek do Visual Studio, który pozwala wykonać kroki 4-6 kilkoma kliknięciami myszką. Nazywa się on Wax. Uważam, że na dłuższą metę nie ma sensu pracować bez tego narzędzia. Interfejs jest bardzo prosty i intuicyjny.
  7. Ustawiam ikonę aplikacji. Będzie ona widoczna między innymi w Panelu Sterowania. W moim przypadku plik z ikoną znajduje się w projekcie z aplikacją WPF.
  8. Teraz kolej na stworzenie ikony na pulpicie i dodanie aplikacji do windowsowego menu.

  9. Fajnie byłoby żeby użytkownik zobaczył jakikolwiek dialog, gdzie będzie mógł zobaczyć np. licencję, ścieżkę do instalacji, postęp instalacji. WiX daje nam możliwość skonfigurowania dialogu według naszych potrzeb. Możemy tworzyć własne niestandardowe okienka. Ja skorzystam z jednego z już gotowych i dostępnych dialogów. Do referencji projektu z Setup’em trzeba dodać referencję do biblioteki WixUIExtension.dll (u mnie znajduje się w lokalizacji C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll). Następnie dodajemy odpowiedni wpis do pliku Product.wxs.
  10. Jeżeli chodzi o licencję to musimy posiadać plik RTF z treścią licencji. Jeżeli już to mamy, dodajemy plik do projektu i wstawiamy odpowiedni odnośnik.
  11. Jeśli teraz zbudowalibyśmy nasz instalator powinniśmy zauważyć, że oprócz pliku MSI powstały również inne pliki CAB. Niestety bez tych plików nasz instalator nie będzie działać prawidłowo. Jest jednak prosty sposób na to aby w wyniku builda powstał jeden niezależny plik MSI.
  12. Na koniec prosty sposób rozwiązujący problem z wersją instalatora. W moim przypadku wersja aplikacji zapisana jest w pliku AssemblyInfo projektu WPF. Można skonfigurować nasz instalator tak, aby korzystał z tej samej wersji.

    Warto pamiętać, że jeżeli chcemy aby nowa wersja instalatora nadpisywała poprzednio zainstalowaną wersję, muszą być spełnione dwa warunki. Trzeba zachować tą samą wartość UpgradeCode i zmienić wartość Id. Inicjalna konfiguracja już o to zadbała. Gwiazda przypisana do Id oznacza, że wartość będzie generowana za każdym razem kiedy będziemy budować nasz instalator.

To już wszystko. W ten sposób byłem w stanie zbudować prosty instalator spełniający moje wymagania. WiX daje nam dużo więcej możliwości konfiguracji. Jeżeli w tym krótkim poście nie znalazłeś odpowiedzi na swoje pytania dotyczące budowania instalatora – nic straconego. W sieci istnieje sporo materiałów, w tym dokumentacja WiX’a, które z pewnością rozwieją Twoje wątpliwości. Jeżeli któryś krok mojej instrukcji był niejasny i nie masz pewności jak powinien wyglądać efekt końcowy. Zapraszam do podejrzenia źródeł projektu Winbot.

Dodaj komentarz

Twój adres email nie będzie opublikowany. Pola wymagane zostały oznaczone *