Jak działa installator zrobiony z Wix toolset?

1

Analizuje właśnie bug-a, w którym instalator programu nadpisuje plik konfiguracyjny *.ini w trakcie upgrade-u aplikacji.
Jakiś zdolniacha zdecydował, że ten ini ma być obok pliku wykonalnego (nie znam się na Windows, ale z tego co mi wiadomo, plik ten powinien się znaleźć w osobnym miejscu).

Instalator pisany jest przez studenta (dosłownie i w przenośni), więc jakość kodu jest straszna. Testów oczywiście nie ma, bo to instalator (dla mnie to tylko wymówka, a skoro instalator robi dużo, to powinien mieć testy).

Z tego o ustaliłem, po wprowadzeniu wszystkich danych konfiguracyjnych i naciśnięciu "Install", pliki są kopiowane a w pewnym momencie, plik "ini" jest kasowany, a potem pojawia się nowy z ustawieniami domyślnymi.

Teraz jako, że Windows-a używam ponownie od 6-ci mc (przerwa 5 lat), a Wix toolset to już dla mnie czarna magia (którą muszę przyswoić), mam kilka pytań, które powinny mi pomóc w zrozumieniu tego bug-a:

  1. Instalator ma opcję anulowania instalacji w trakcie kopiowania. Dodając do tego znikający i pojawiający się plik ini, przypuszczam, że kopiowanie jest wykonywane do tymczasowo katalogu, który jest potem zamieniany z katalogiem docelowym. Z tego powodu plik ini znika, a potem jedna z akcji post kopiowania odtwarza plik z wartościami domyślnymi (jeszcze jej nie namierzyłem). Czy ma to sens?
  2. Akcje uruchamiane są w osobnym procesie (pewnie jak dla bezpieczeństwa), ale z jakiegoś powody niektóre akcje uruchamiane są w jeszcze innym procesie, co utrudnia debugowanie. Czym to może być spowodowane? Czy jakiś wpis w xml-u powoduje powstanie dodatkowego procesu?
  3. Znacie jakieś wzorce jak taki instalator powinien wyglądać, tak by był utrzymywany (obecny stan kodu jest straszny, a nie chce wymyślać koła na nowo). I nie mówię tu o aplikacjach i instalatorach klasy "Hello world", bo google głównie to mi wypluł
  4. Jakieś wskazówki jak rozwiązać problem z tym plikiem? W tej chwili zastanawiam się czy nie przemycić zawartości pliku w ustawieniach instalatora albo skopiować do pliku tymczasowego.

Dostałem jakaś książkę z opisem Wix toolset (460 stron), ale zejdzie mi trochę czasu, zanim znajdę w niej coś, co mi pozwoli pozyskać potrzebną informację.

0

A może wystarczy ci coś pokroju inno setup?

0

Ma ktoś inne propozycje?

1

Dawno już nie pisałem w Wix, próg wejścia jest rzeczywiście wysoki, ale jak już się go pozna to utrzymanie jest znacznie przyjemniejsze niż w tych wykiliwanych instalatorach.

Odnośnie znikającego pliku, to z tego co pamiętam w przypadku upgradu, o tym czy nadpisać istniejący plik nowym decyduje GUID danego Componentu w którym jest plik, spróbuj nadać temu komponentowi taki sam guid jaki miał w poprzedniej wersji, bo pewnie obecnie masz tam "*".

0

Jeżeli chodzi o dobre praktyki... to jeśli rozmawiamy o aplikacji pisanej w .NET, to po pierwsze nie jest dobrą praktyką używanie plików ini ;) Ustawienia użytkownika powinny znaleźć się w pliku settings, w którym ustawiasz user scope albo application scope (i to określa też, które ustawienia zostaną nadpisane przy aktualizacji).

Natomiast prawdopodobnie przenoszenie tego to trochę roboty ;) Dlatego rozwiązaniem na szybko może być zrobienie tak, by akcja kopiowania pliku ini odbywała się warunkowo - np. tylko wtedy, gdy plik ini jeszcze nie istnieje. Np. tu link, od którego można zacząć: https://stackoverflow.com/questions/25765461/install-component-conditionally-in-wix

1 użytkowników online, w tym zalogowanych: 0, gości: 1