web-dev-qa-db-ger.com

Wie kann ich automatische Updates in einer plattformübergreifenden Qt-Anwendung aktivieren?

Ich mag Anwendungen, die sich ohne großen Aufwand selbst aktualisieren können (denke: Sparkle framework für Mac). Gibt es einen Code/eine Bibliothek, mit der ich dies in einer Qt-Anwendung durchführen kann, ohne mir Gedanken über die Details des Betriebssystems machen zu müssen?

Zumindest für Windows, Mac und benutzereigene Linux-Binärdateien.

Ich könnte Sparkle in die Mac-Version integrieren, etwas für den Linux-Fall codieren (nur für eine eigenständige, benutzereigene Binärdatei; ich würde mich nicht mit distribution packaging anlegen, falls mein Programm jemals gepackt wird) und jemanden finden um mir auf der Windows-Seite zu helfen, aber das ist schrecklich schmerzhaft.

46
F'x

OK, ich nehme an, ich nehme es als "keinen (plattformübergreifenden) Weg". Das ist schade!

0
F'x

Es ist keine Komplettlösung, aber ein plattformübergreifendes Tool (Windows, Mac, Linux) zum Erstellen von Paketen für automatische Updates und deren Installation ist unter https://github.com/mendeley/Update-Installer verfügbar. . Dieses Tool befasst sich nicht mit der Veröffentlichung von Updates oder dem Herunterladen von Updates.

Dies wurde für die Verwendung mit einer Qt-basierten Anwendung geschrieben. Um das Update-Installationsprogramm jedoch klein, eigenständig und einfach zu erstellen, verwendet das Installationsprogramm nur Standardsystembibliotheken (C++ - Laufzeitumgebung, pthreads/libz/libbz2 unter Linux/Mac, Win32-API unter Windows) , Cocoa auf Mac, GTK mit Fallback unter Linux). Dies vereinfacht die Bereitstellung von Updates, die neue Versionen von Qt und andere Nicht-Systembibliotheken enthalten, von denen Ihre Anwendung abhängig sein kann.

Bevor ich darüber nachdenke, würde ich vorschlagen:

  • Wenn Sie nur für zwei Plattformen bauen, sollten Sie erwägen, für diese Plattformen standardmäßige und gut getestete Frameworks für die automatische Aktualisierung zu verwenden, z. Sparkle auf dem Mac, Google's Omaha auf Windows oder Systemen zur automatischen Aktualisierung, die in gängige Installations-Frameworks (z. B. InstallShield) integriert sind. Ich habe BitRock nicht ausprobiert.
  • Unter Mac ist der Mac App Store möglicherweise eine gute Option. Siehe https://bugreports.qt.io/browse/QTBUG-16549 .
  • Erwägen Sie unter Linux, ein .deb-Paket und ein einfaches Repository für das Hosting zu erstellen. Sobald die Benutzer ein Repository eingerichtet haben, kümmern sich die systemweiten Software-Update-Tools um die Suche nach neuen Versionen und deren Installation. Die Schritte zum Einrichten eines neuen Repositorys sind jedoch für viele neue Ubuntu/Debian-Benutzer zu komplex. Was wir getan haben und was auch Dropbox und Google getan haben, ist das Erstellen eines .deb-Pakets, das das Repository als Teil der Paketinstallation einrichtet.

Einige weitere Hinweise zum Erstellen eines Updaters:

  • Wenn unter Windows Vista/7 die Anwendung systemweit installiert wird (z. B. in C:\Programme\$ APPNAME), wird den Benutzern eine unheimliche UAC-Eingabeaufforderung angezeigt, wenn der Updater versucht, Berechtigungen zum Schreiben in das Installationsverzeichnis zu erhalten. Dies kann vermieden werden, indem entweder in ein vom Benutzer schreibbares Verzeichnis installiert wird (ich nehme an, dass dies bei Google Chrome der Fall ist) oder indem Sie ein Authenticode-Zertifikat erhalten und dieses zur Signatur der Updater-Binärdatei verwenden.
  • Unter Windows Vista/7 kann eine Anwendungs-EXE-Datei oder DLL nicht gelöscht werden, wenn sie verwendet wird. Der Updater kann jedoch die vorhandene EXE-/DLL-Datei in ein temporäres Verzeichnis verschieben und zum Löschen einplanen beim nächsten Neustart.
  • Auf Ubuntu werden Repositorys von Drittanbietern nach Verbreitungsupdates deaktiviert. Um dies zu umgehen, erstellt Google einen Cron-Job, um das Repository bei Bedarf erneut hinzuzufügen.
21
Robert Knight

Shameless plug: Fervor , eine einfache, von Sparkle inspirierte, plattformunabhängige (Qt-basierte) Anwendung.

9
Linas

Schamloser Plug: Dies ist eine relativ alte Frage, aber ich dachte, es könnte nützlich sein, eine kürzlich erwähnte Bibliothek zu erwähnen, die ich "QSimpleUpdater" nannte. Neben der Benachrichtigung, wenn eine neuere Version vorliegt, können Sie das Änderungsprotokoll in einem beliebigen Format (z. B. HTML oder RTF) herunterladen und die Aktualisierungen mithilfe eines Dialogfelds direkt aus Ihrer Anwendung herunterladen. 

Wie Sie es von einem Qt-Projekt erwarten können, funktioniert es auf jeder Plattform, die von Qt unterstützt wird (getestet unter Windows, Mac & Linux).

Links:

Bildschirmfoto:

enter image description here

6
Alex Spataru

Obwohl es etwas anders funktioniert als Sparkle, enthält BitRock InstallBuilde r einen in Qt geschriebenen Autoupdater, der unabhängig verwendet werden kann (Haftungsausschluss, ich bin der ursprüngliche BitRock-Entwickler). Es ist eine kommerzielle App, aber wir haben kostenlose Lizenzen für Open Source-Projekte.

3
Daniel Lopez

Sie können UpdateNode verwenden, um alle Möglichkeiten zur Aktualisierung Ihrer Software zu erhalten. Es verwendet einen plattformübergreifenden Qt-Client und ist für Open Source kostenlos!

UPDATE Habe nur einige weitere Analysen dazu gemacht und mag diese Lösung wirklich:

Pros:

  • Frei für Open Source !!! Sogar der Client ist Open Source: https://github.com/updatenode/unclient
  • Der Client ist bereits in mehreren Sprachen lokalisiert 
  • Sehr flexibel in Bezug auf Updates. Sie können sogar einzelne Nicht-Binärdateien aktualisieren.
  • Bietet zusätzlich die Möglichkeit, Nachrichten über den Client anzuzeigen.
  • Gebrauchsfertige Binärdateien und Installationsprogramme für alle gängigen Linux-Distributionen, einzelne Windows-Binärdateien sowie Installationsprogramme und eine Lösung für Mac (die ich nicht ausprobiert habe, da ich keinen Mac habe)
  • Einfach zu bedienender Webservice. Nizza Statistiken und Update-Check sind in wenigen Minuten integriert

Nachteile:

  • Ich vermisse eine Multi-User-Verwaltung im Onlinedienst. Vielleicht werden sie es in Zukunft tun - ich werde das definitiv in ihrem Feedback-Portal vorschlagen
  • Der Client ist nur ein GUI-Client - daher müssen Sie ihn verkleinern, um ohne GUI-Frontend zu laufen (möglicherweise nur für Leute wie mich notwendig ;-)).

Unterm Strich also, da diese Lösung recht neu ist, denke ich, dass hier viel Potenzial steckt. Ich werde es definitiv in meinem Projekt verwenden und freue mich auf mehr von ihnen! Daumen hoch!

2
inspector

Der BlogbeitragMixing Cocoa und Qtkann das Problem für die Mac-Plattform lösen.

2
Rakesh Singh

Ich habe gefunden, dass WebUpdate ziemlich nützlich ist, obwohl es mit den wxWidgets geschrieben wurde. Aber keine Sorge, es ist eine separate App, die Ihre Updates verwaltet. Die Schritte zur Integration sind ziemlich einfach: Schreiben Sie einfach zwei XML-Dateien und führen Sie den Updater aus. Und ja, es ist plattformübergreifend.

Der Vorteil ist, dass automatisch alle erforderlichen Dateien heruntergeladen und entpackt/installiert werden. Es wird nicht nur ein Popup mit einer Benachrichtigung über eine neue Version und einem Link zum Herunterladen angezeigt. Eine andere Sache, die Sie damit machen können, sind anpassbare Aktionen.

Die Hauptseite des Projekts ist hier können Sie die docs lesen oder das offizielle Tutorial anschauen.

2
Roman Kruglov

Ich habe eine Auto-Updater-Bibliothek entwickelt, die auf Mac OS X, Linux und so ziemlich jedem Unix hervorragend funktioniert, dass Sie eine Verknüpfung aufheben können, während die Datei noch geöffnet ist. Der Grund ist, dass ich das heruntergeladene Paket einfach über die vorhandene Anwendung extrahiert habe. Da ich mich auf diese Funktionalität stützte, bin ich leider auf Probleme mit Windows gestoßen, da Windows die Verknüpfung mit einer geöffneten Datei nicht zulässt.

Die einzige Alternative, die ich finden könnte, ist MoveFileEx mit dem Flag zum Ersetzen beim Neustart zu verwenden, aber das ist furchtbar.

Das Umbenennen des Arbeitsverzeichnisses der Anwendung funktioniert jedoch unter Windows 7 und Windows XP. Ich habe Windows Vista noch nicht ausprobiert.

2
cheez

Ich schlage vor, dass Sie das Plugin lesen und wie man es erstellt und verwendet. Wenn Ihre Anwendungsarchitektur modular ist und in verschiedene Plugins aufgeteilt wird. Sehen Sie sich das Google Auto Update-Hilfsprogramm http://code.google.com/p/omaha/ an. Wir benutzen das. 

1
Ankur Gupta

Thibault Cuvelier schreibt ein Tutorial (auf Französisch), um einen Updater zu entwickeln. Ich weiß, dass die Erklärungen in Französisch sind (und jeder versteht nicht Französisch), aber ich denke, dass dies mit einem Web-Übersetzer wie Google Translate lesbar ist. Damit haben Sie einen plattformübergreifenden Updater, müssen diesen aber selbst schreiben.

Soweit ich weiß, ist der einzige Teil des Updaters, der im Tutorial erklärt wird, der Teil zum Herunterladen von Dateien. Falls dies hilfreich sein kann, lesen Sie die AnleitungUn updater avec Qt.

Ich hoffe das hilft.

1

Dies ist eine alte Frage, aber es gibt kein Eichhörnchen in den Antworten, das ist BESTE LÖSUNG , hier ist was ich in qt 5.12.4 mache mit qt quick "my qml app" kannst du das in jeder anderen sprache machen

Ich mache das unter Windows, es gibt auch eine Mac-Version von Squirrel, ich kenne mich mit Linux nicht aus

  1. nuget-Paket herunterladen Explorer-Version https://github.com/NuGetPackageExplorer/NuGetPackageExplorer/releases
  2. öffne den Nuget-Paket-Explorer und füge dieses Verzeichnis 'lib/net45' hinzu. Es ist egal, ob du eine .net-App hast oder nicht.
  3. fügen Sie alle Dateien zu diesem Ordner hinzu. Geben Sie Ihre Version in den Metadaten an
  4. speichern Sie die nupkg-Datei
  5. download Eichhörnchen Release https://github.com/Squirrel/Squirrel.Windows/releases
  6. fügen Sie dem Windows-Umgebungspfad ein Eichhörnchen hinzu
  7. öffne cmd und cd in das Verzeichnis der nupkg-Datei
  8. squirrel --releasify file_name.nupkg -> Jetzt im Release-Ordner sollte sich die Datei setup.exe befinden, die die App und andere Dateien installiert.
  9. um eine neue Version zu erstellen, führen Sie die Schritte 2,3,4,7,8 erneut aus. Wenn es sich um ein Update handelt, wird eine Delta-Datei erstellt, die nur zum Aktualisieren benötigt wird. Legen Sie diese Dateien in Ihr Serviceverzeichnis, zum Beispiel in den Update-Ordner Ihrer Website, die Sie benötigen Um das Durchsuchen von Verzeichnissen in IIS, und um die Anwendung automatisch zu aktualisieren, müssen Sie Update.exe aufrufen, das sich im übergeordneten Ordner des Anwendungsstammverzeichnisses appdir/../update.exe --update http://yourserver.com/upates/ befindet, nachdem die Anwendung neu gestartet wurde mit neuer version
  10. sie können Dokumentation für Eichhörnchen in https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/getting-started/0-overview.md und Nuget Package Explorer hier finden - https://github.com/NuGetPackageExplorer/NuGetPackageExplorer und Sie können auch nur nuget.exe verwenden, wenn Sie den Nuget-Paket-Explorer nicht verwenden möchten, der zur dynamischen Generierung von Versionen verwendet werden kann, die heruntergeladen werden können von https://www.nuget.org/downloads

So einfach. Jetzt haben Sie eine Auto-Update-App, mit der Updates vom Server und von der Auto-Update-App heruntergeladen werden. Für weitere Informationen können Sie Dokumentationen lesen.
note : für diese Zwecke https://github.com/Squirrel/OldSquirrelForWindows/issues/205

1
Mahdi Khalili