Versions checker

Verschiedenes zu Qt
Antworten
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

Versions checker

Beitrag von jd »

Hallo Gemeinde,

Ich habe in meine Applikation eine "check for new version" funktion eingebaut. Das funktioniert auch soweit ganz gut, jedoch wollte ich mal fragen ob ich eventuell meine Vorgehensweise besser machen kann.

Ich habe online eine version.txt stehen mit folgendem Inhalt:
0.1.3
qsystem-0.1.3-linux-installer.bin
qsystem-0.1.3-windows-installer.exe
Die Datei wird von meinem Programm via QHttp rungerleaden und in QDir::tempPath() gespeichert. Danach parse ich die Datei (prüfe die versionsnummern).

Falls eine Neue Version vorhanden ist, wird dann die jeweilige Installationsdatei für das OS runter geladen. Was noch kommt, ist das die Installationsdatei dann automatisch mit QProcess gestartet wird (keine Ahnung ob das so funktioniert, muss ich testen).

Kann man da was verbessern? Oder gibt es da effektivere Methoden wie man so etwas realisieren kann?

Bin für Tipps dankbar.

so long
jd
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

Beitrag von dontinelli »

Ich finde das Vorgehen nicht schlecht. Je nach Umfang würde ich mir aber überlegen, ob du nicht nur die einzelnen geänderten Dateien herunterladen möchtest. Dazu müsste natürlich die Version.txt etwas ausfürlicher sein. Es hat übrigen erst gerade eine ähnliche Diskussion betreffend "Binary Diff." gegeben, die Suche hilft dir sicher weiter.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

close1
Beiträge: 39
Registriert: 9. April 2008 14:28
Kontaktdaten:

Beitrag von close1 »

ich würde dir empfehlen anstatt eines installationsprogramms eine selbstentpackende .rar datei zu nehmen(btw kann man auch normale .rar dateien einfach mit QDesktopHelper entpacken ;D)

in die rar kommen dann einfach alle neuen bzw veränderten dateien rein usw.

falls dein projekt nicht kommerziell ist fallen auch keine kosten an für winrar oder so an(oder?). sonst kannst du ja auch mal 7zip probieren.
MfG

close1
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

Beitrag von jd »

Hallo, der link ist recht gut, aber die Methoden sind meiner Meinung nach etwas zu komplex und unflexibel, also ich finde es geht auch einfacher. Binary Diff hatte ich mir auch überlegt, da Repositories damit arbeiten. Also habe ich mir mal einen kleinen Plan zurecht gelegt, auf was es beim patchen ankommt. Ich gehe jetzt nur von meiner Arbeitsweise aus aber eventuell hilft dem einen oder anderen das sogar. Das was ich hier beschreibe funktioniert sowohl unter Linux als auch unter Windows und MAC.

Meine Software hat immer eine 3 stellige Versions nummer.
x.x.x

Der Version im Programm kann man mit

Code: Alles auswählen

QCoreApplication::setApplicationVersion("0.1.3");
setzen.

Wenn man eine Autoupdate funktion haben will, sollte man mit einem Installer arbeiten. Der Installer macht im Grunde nichts anderes als Daten zu kopieren. Bei der erst Installation müssen natürlich auch die ganzen Qtlibs mit kommen, falls man die nicht voraussetzen will. Das bläht den Installer natürlich auf. Und es ist sinnlos die beim patchen immer mit zu liefern. Also habe ich eine patch-config für meinen Installer, der dann mal statt 20MB 2MB ist.

In dem Artikel über Binary Diffs kam die Idee mit einer externen Starter Applikation. Das halt ich nicht für gut, da man das auch einfacher lösen kann. Mann muss im Endeffekt nichts anderes machen, als den Installer aus der Applikation aus starten und diese dann Beenden. Somit kann man auch Dateien ohne Probleme ersetzen. Jedoch muss der Installer da flexibel genug sein:
- Er sollte wissen wohin das Programm installiert wurden ist.
- Er muss Softlinks für Linux libs setzten können.
- Er muss auf Konfigurationen zugreifen können (Windows bsp Registry)
- Er muss postInstall-Skripte unterstützen (mit Argumenten)
- Er muss eine Applikation starten können, damit ein automatischer Programmstart gewährleistet ist.

Der Benutzer muss dann nur noch 2Mal auf weiter klicken.

Im Endeffekt muss man sich nur aktiv darum kümmern welchen Patch man von version x zu version y benötigt, der Rest sollte der Installer wissen.

Ich verwende als Installer BitRock for Qt der kann das alles und noch vieles mehr.

Falls es erwünscht ist, kann ich das ganze auch noch ausführlicher machen Wie man einem Programm einen Autoupdater verpassen kann. Dann würde ich das mit Code Beispielen machen und mit BitRock Konfiguration.

so long
jd
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich würde es wohl auch so wie jd im ersten Beitrag machen. Wird auch an vielen Stellen so praktiziert - der Version-Checker fragt ob die neue Version installiert werden soll - wenn ja dann wird sie runtergeladen, ausgeführt und das Programm beendet. Finde es so am einfachsten - bei allen anderen Möglichkeiten muss man sich um alles mögliche kümmern :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten