Winbot – aktualizowanie aplikacji desktopowej

W końcu przyszedł ten moment, w którym stwierdziłem, że pora wypuścić pierwszą wersję Winbota. Zbudowałem instalator i wystawiłem release na githubie. Dostępny do pobrania tutaj. Zanim jednak to uczyniłem, zastanawiałem się co będzie, jeżeli zacznę wypuszczać kolejne wersje. W jaki sposób informować użytkownika z zainstalowaną aplikacją, że pojawiła się nowsza wersja? W tym poście opiszę własne rozwiązanie tego problemu.

Jedna rzecz była dla mnie pewna od samego początku. Chciałem rozwijać aplikację na githubie i wstawiać tam wszystkie releasy. Pomyślałem więc o logice, która sprawdzałaby na githubie czy ostatnio wypuszczony instalator ma nowszą wersję niż aktualnie zainstalowana. Następnie użytkownik byłby pytany czy chce dokonać aktualizacji. Sam proces aktualizacji postanowiłem przeprowadzić najprostszą znaną mi drogą:

  1. Pobranie nowego instalatora do folderu tymczasowego.
  2. Uruchomienie nowego procesu, który czeka na zakończenie działania aplikacji (Winbota).
  3. Następnie nowy proces uruchamia pobrany instalator.
  4. Po instalacji usunięcie pobranego instalatora.

Stworzyłem nowt project – aplikację konsolową – którego zadaniem było wykonanie powyższych kroków. W wyniku zbudowania tego projektu powstaje plik AppUpdate.exe, który jest wykorzystywany w kodzie źródłowym. Oto bardzo prosty (moim zdaniem) kod, który realizuje kroki 2-4:

Jeżeli chodzi o krok pierwszy to postanowiłem stworzyć bardziej generyczną logikę, tak aby nie być zależnym tylko i wyłącznie od githuba. Ułatwi to pracę, jeżeli w przyszłości coś się zmieni lub ktoś inny będzie chciał skorzystać z mojego kodu. Poniżej znajduje się kod odpowiedzialny za sprawdzenie czy istnieje nowsza wersja i ewentualną aktualizację aplikacji.

Na koniec klasa ściśle związana już z platformą githuba. Jeżeli kiedykolwiek będziecie chcieli w jakiś sposób związać waszą aplikację z githubem, najlepiej jest zapoznać się dokumentacją api. Dostępna jest tutaj. Warto zwrócić uwagę na fakt, że wiele metod api nie wymaga logowania, co znacznie upraszcza kod. W moim przypadku właśnie tak było. Wołam tylko jedną metodą, która zwraca dane na temat ostatniego releasu.

Logika powinna być wywołana zaraz po starcie aplikacji. Z racji tego, że Winbot rozwijany jest w oparciu o WPF, plikiem wejściowym jest App.xaml.cs. To właśnie tam umieściłem kod, który sprawdza aktualną wersję oraz odpowiada za interakcję z użytkownikiem.

Trochę dużo kodu jak na jeden post. Mam jednak nadzieję, że rozwiązanie jest proste i zrozumiałe. Cały kod dostępny jest jak zawsze na githubie.

Dodaj komentarz

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