Jak działa installator zrobiony z Wix toolset?

Odpowiedz Nowy wątek
2019-02-09 18:26
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ę.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2019-02-09 19:55

Pozostało 580 znaków

2019-02-09 18:46
0

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

Nie chce pisać wszystkiego od nowa, bo do tego się sprowadza zmiana na "inno setup". Równie dobrze mogę wszystko przepisać nadal używając wix toolset. - MarekR22 2019-02-09 19:56
Chodziło mi o to, że może możesz zmienić instalator i zastąpić go instalatorem z generatora takich aplikacji http://www.jrsoftware.org/isinfo.php Używałem go kiedyś i patrząc po tym jakie problemy miałem z innymi aplikacjami tego typu to to działało tak na prawdę bezproblemowo - mr_jaro 2019-02-09 19:59

Pozostało 580 znaków

2019-02-11 16:39
0

Ma ktoś inne propozycje?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2019-02-12 08:28
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 "*".


edytowany 1x, ostatnio: neves, 2019-02-12 08:33

Pozostało 580 znaków

2019-02-12 22:57
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/que[...]omponent-conditionally-in-wix

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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