Jak włączyć automatyczne aktualizacje w wieloplatformowej aplikacji Qt?

Uwielbiam aplikacje, które są w stanie zaktualizować się bez żadnego wysiłku ze strony użytkownika (pomyśl: Sparkle framework for Mac). Czy jest jakiś kod/biblioteka, którą mogę wykorzystać, aby to zrobić w aplikacji Qt, bez martwienia się o szczegóły systemu operacyjnego?

Przynajmniej dla Windows, Mac i linuksowych plików binarnych.

Mógłbym zintegrować Sparkle w wersji Mac, zakodować coś dla sprawy Linuksa (tylko dla samodzielnego, posiadanego przez użytkownika binarnego; nie zadzieram z distribution packaging, if my program is ever packaging), i znaleźć kogoś, kto mi pomoże Po Stronie Windows, ale to strasznie bolesne.

Author: Peter Mortensen, 2010-01-16

11 answers

Nie jest to kompletne rozwiązanie, ale wieloplatformowe (Windows, Mac, Linux) narzędzie do tworzenia pakietów automatycznych aktualizacji i ich instalowania jest dostępne pod adresem https://github.com/mendeley/Update-Installer . to narzędzie nie zajmuje się publikowaniem aktualizacji ani ich pobieraniem.

Został napisany do użytku z aplikacją opartą na Qt, ale aby Instalator aktualizacji był mały, samodzielny i łatwy w budowie, instalator używa tylko standardowych bibliotek systemowych (C++ runtime, pthreads / libz/libbz2 na Linux / Mac, Win32 API na Windows, Cocoa na Mac, GTK z fallback na Linux). Upraszcza to dostarczanie aktualizacji zawierających nowe wersje Qt i innych bibliotek, od których może zależeć Twoja aplikacja.

Zanim jednak to rozważę, proponuję:

  • jeśli budujesz tylko dla dwóch platform, rozważ użycie standardowych i dobrze przetestowanych frameworków automatycznej aktualizacji dla tych platform - np. Sparkle na Maca, Google's Omaha on Windows lub systemy automatycznej aktualizacji wbudowane w popularne frameworki instalacyjne (np. InstallShield). Nie próbowałem Bitrocka.
  • na Mac, Mac App Store może być dobrym rozwiązaniem. Zobacz https://bugreports.qt.io/browse/QTBUG-16549 chociaż.
  • w Linuksie rozważ stworzeniepakiet deb i proste repozytorium do hostowania go. Gdy użytkownicy mają skonfigurowane repozytorium, systemowe Narzędzia do aktualizacji oprogramowania zajmą się sprawdzaniem i instalowaniem nowych wydań. Kroki w celu utworzenia nowe repozytorium jest jednak zbyt złożone dla wielu nowych użytkowników Ubuntu / Debiana. Co zrobiliśmy, a także to, co Dropbox i Google zrobili, jest stworzenie .pakiet deb, który tworzy repozytorium jako część instalacji pakietu.

Kilka innych uwag na temat tworzenia Updatera:

  • w systemie Windows Vista / 7, Jeśli aplikacja jest zainstalowana w całym systemie (np. w C:\Program Files\$APPNAME) użytkownicy zobaczą straszny monit UAC, gdy updater próbuje uzyskać uprawnienia do zapisu katalog instalacyjny. Można tego uniknąć, instalując w katalogu zapisywalnym przez użytkownika (zakładam, że to właśnie robi Google Chrome) lub uzyskując certyfikat Authenticode i używając go do podpisania pliku binarnego updater.
  • w systemie Windows Vista / 7, aplikacja .exe lub DLL nie mogą zostać usunięte, jeśli są używane, ale updater może przenieść istniejące .exe / DLL z drogi do katalogu tymczasowego i zaplanować go do usunięcia przy następnym restarcie.
  • na Ubuntu, repozytoria innych firm są wyłączone po aktualizacji dystrybucji. Google działa wokół tego, tworząc zadanie cron, aby w razie potrzeby ponownie dodać repozytorium.
 20
Author: Robert Knight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-19 17:26:28

Shameless plug: Fervor , prosta wieloplatformowa (oparta na Qt) aplikacja autoupdater zainspirowana Sparkle.

 9
Author: Linas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-02 00:18:53

Shameless plug: to stosunkowo stare pytanie, ale pomyślałem, że przydałoby się wspomnieć bibliotekę, którą niedawno stworzyłem, którą nazwałem "QSimpleUpdater". Oprócz powiadamiania o nowszej wersji, pozwala ona pobrać dziennik zmian w dowolnym formacie (takim jak HTML lub RTF) i pobrać aktualizacje bezpośrednio z aplikacji za pomocą okna dialogowego.

Jak można oczekiwać od projektu Qt, działa on na każdej platformie obsługiwanej przez Qt (testowane na Windows, Mac & Linux).

Linki:

Zrzut ekranu:

Tutaj wpisz opis obrazka

 6
Author: Alex Spataru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-19 02:10:22

Chociaż działa nieco inaczej niż Sparkle, BitRock InstallBuilde r zawiera autoupdater napisany w Qt, który może być używany niezależnie(zastrzeżenie, jestem oryginalnym deweloperem BitRock). Jest to aplikacja komercyjna, ale mamy wolne licencje na projekty open source.

 3
Author: Daniel Lopez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-08 01:48:33

Znalazłem WebUpdate za bardzo przydatny, chociaż jest napisany za pomocą wxWidgets. Ale nie martw się, jest to osobna aplikacja, która obsługuje Twoje aktualizacje. Kroki integracji są dość proste - wystarczy napisać dwa pliki XML i uruchomić updater. I tak, jest wieloplatformowy.

Zaletą jest to, że automatycznie pobierze i rozpakuje / zainstaluje wszystkie wymagane, a nie tylko wyświetli wyskakujące okienko z powiadomieniem o nowej wersji i linkiem do pobrania. Jeszcze jedno. możesz to zrobić, dostosowując działania.

Strona główna projektu jest tutaj, możesz przeczytać docslub spojrzeć na oficjalny tutorial .

 2
Author: Roman Kruglov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-10 08:34:30

Opracowałem bibliotekę auto-updater, która działa pięknie na Mac OS X, Linux i prawie każdy Unix, który pozwala na odłączenie pliku, gdy plik jest nadal otwarty. Powodem jest to, że po prostu wyodrębnił pobrany pakiet na górze istniejącej aplikacji. Niestety, ponieważ polegałem na tej funkcjonalności, napotkałem problemy w systemie Windows, ponieważ system Windows nie pozwala odłączyć otwartego pliku.

Jedyną alternatywą, jaką mogłem znaleźć, jest użycie MoveFileEx z replace na fladze restartu, ale to okropne.

Jednak zmiana nazwy katalogu roboczego aplikacji działa na Windows 7 i Windows XP. Nie próbowałem jeszcze systemu Windows Vista.

 2
Author: cheez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-11 13:08:42

Wpis na blogu mieszanie kakao i Qt może rozwiązać problem dla platformy Mac.

 2
Author: Rakesh Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-11 13:09:45

Możesz użyć UpdateNode, który daje Ci wszystkie możliwości aktualizacji oprogramowania. Korzysta z wieloplatformowego klienta Qt i jest darmowy dla Open Source!

UPDATE Po prostu zrobiłem dalszą analizę na ten temat i naprawdę podoba mi się to rozwiązanie: {]}

Plusy:

  • Free for Open Source!!! Nawet klient jest Open Source: https://github.com/updatenode/unclient
  • klient jest już zlokalizowany w kilku językach
  • Bardzo elastyczne pod względem aktualizacji. Możesz nawet aktualizować pojedyncze pliki nie-binarne.
  • zapewnia dodatkowo sposób wyświetlania wiadomości przez Klienta.
  • [11]}gotowy do użycia binaria i Instalator dla wszystkich popularnych dystrybucji Linuksa, pojedyncze binarne Windows, a także instalator i rozwiązanie dla Mac (którego nie próbowałem, ponieważ nie mam Mac)
  • łatwy w użyciu serwis internetowy, ładne statystyki i sprawdzanie aktualizacji jest zintegrowane w ciągu kilku minut

Wady:

  • jestem brak zarządzania wieloma użytkownikami w usłudze online. Być może zrobią to w przyszłości - na pewno zasugeruję, że w ich portalu opinii
  • klient jest tylko klientem GUI - więc musisz go zmniejszyć, aby działać bez interfejsu GUI (może tylko dla ludzi takich jak ja ;-) )

Podsumowując, ponieważ to rozwiązanie jest całkiem nowe, myślę, że jest tu duży potencjał. Na pewno wykorzystam go w swoim projekcie i czekam na więcej od nich! Kciuki w górę!

 2
Author: inspector,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-14 06:56:47

Proponuję przeczytać na plugin i jak je tworzyć i używać. Jeśli twoja Architektura aplikacji jest modułowa i może być podzielona na różne wtyczki. Spójrz na Google Auto Update utility http://code.google.com/p/omaha / . używamy tego.

 1
Author: Ankur Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-16 18:46:06

Thibault Cuvelier pisze samouczek (w języku francuskim), aby opracować aktualizator. Wiem, że wyjaśnienia są w języku francuskim( i wszyscy nie rozumieją francuskiego), ale myślę, że może to być czytelne z tłumaczem internetowym, takim jak Google Translate . Dzięki temu będziesz miał wieloplatformowy aktualizator, ale musisz go napisać samodzielnie.

Z tego co wiem, jedyną częścią Updatera, która jest wyjaśniona w samouczku, jest część pobierania plików. W przypadku, gdy może Ci to pomóc, zapoznaj się z do samouczka, Un updater avec Qt.

Mam nadzieję, że to pomoże.

 1
Author: Patrice Bernassola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-11 13:05:58

OK, więc myślę, że biorę to jako "nie (cross-platform) sposób". Szkoda!

 0
Author: F'x,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-24 15:07:11