Seite 1 von 2
Download via FTP -> Automatisches Software Update mit QT4
Verfasst: 6. November 2006 10:42
von nando
Hi,
ich bin gerade dabei eine Funktionalitaet zu implementieren, die es meiner Anwendung erlaubt auf einem ftp server nach einer neueren Version zu suchen und gegebenfalls die neue version downloadet.
so weit so gut....
weiss einer wie ich meine aktuelle anwendung durch die neu gedwonloadete ersetzten kann, also aus dem laufenden betrieb..
aktuelles binary ueberscheiben... dann restart der laufenden anwendung... aber wie????
geht das mit QProcess ????
Der user soll z.b auf den Button "Jetzt neu starten" druecken und dann soll die aktuelle anwendung beendet werden aber danach gleich die neue aktuallisierte version gestartet werden...
Gruss,
Nando
Verfasst: 6. November 2006 11:01
von BartSimpson
Ich schätze, so was geht nur mit einem kleinen Trick, indem du deine eigentliche Anwendlung als Bibliothke schreibst, und dann ein kleines Startprogramm. Wenn du denn die Bibliothek erst zu Laufzeit einbindest, solle es gehen, das du diese mit einer neuen Version überschreibst. Du übergibst denn deinem Hilsprogramm den Pfad, wo die neue Lib Temprät liegt. Dieses beenden denn die Bibliothek, überschreibt sie und starte sie neu. Das sollte mit jedem OS gehen. Hat aber so seine Tücken, da der Nutzer immer Systemreche benötigt. Besser währe es, eine Art Aktualisierungsdienst zu implementieren.
Verfasst: 6. November 2006 11:19
von nando
was meinst du denn genau mit Aktualisierungsdienst????
wir machen dass denn die anderen anwendungen???
die laufen ja auch nicht alle mit admin rechten..oder?
idee:
koennte ich nicht eine starter application schreiben,
die beim start einfach die eigentlich anwendung forked ..mit qprocess oder so.... und beim exit der anwendung den exit wert prueft und sich dann entweder kompleet beendet (shutdown) oder aber
die neue gedownloadedete version ueber die aktuelle kopiert und dann neu startet ?????
gruss,
nando
Verfasst: 6. November 2006 11:38
von BartSimpson
Wie währe es 1. mal mit einem guten Deutsch:)
und 2. genau das habe ich beschrieben, nur das du statt der Bibliothke ein 2. Prozess nimmst. Aber das ist ja egal wie man das macht:) Das Ergebnis und das Problem bleibt das selbe. Das das Programm mit Systemrechten laufen muss,
Verfasst: 6. November 2006 11:58
von nando
achso, deshalb auch waehre mit h
also wieso brauche ich admin rechte ????
ich kann doch ein prozess starten mit den gleichen rechten wie der parent... oder was meinst du?
Verfasst: 6. November 2006 12:12
von BartSimpson
wenn du versucht als normale Nutzer nach c:\Programme\ bzw /usr/bin zu schreiben wird das nix. Also haste 2 Möglichkeiten. 1. Als Admin/Root arbeiten(nicht zu empfehlen) oder einen Dienst/Daemon im Hintergrund laufen lassen, der die benötigten Rechte hat. Die eigentliche Anwendung kann denn z.B. via TCP auf 127.0.0.1 kommunizieren. Irgendwo auf den MSDN Seiten gab es mal ein Artikel zu dem Thema. Oder du benutzte unter Windows MSI 3.1 geht aber erst ab Win 2000. Da kannste Aktualisierungen erstellen, die auch normale Nutzer installieren können. Dazu müssen diese denn aber digital signiert sein.(Die Aktualisierungen)
Verfasst: 7. November 2006 06:31
von c_m
Wie wäre es mit einem Installationsprogramm in deinem Update, welches die laufende Applikation geregelt hinunter fährt? In dem Installationsprogramm könntest du z.B. auch die Benutzerrechte Prüfen und ggf zu einem anderen User wechseln (root, Administrator,...)
Schlimmstenfalls schreibste dem User ne MessageBox bitte alles speichern usw und schießt dann den laufenden Prozess deiner Applikation ab.
Verfasst: 7. November 2006 07:45
von nando
Moin,
mir ist immer noch nicht ganz klar, wieso ich als "normaler" user nicht meine Applikation (Binary) ueberschreiben darf??
Ich kann ja auch als "normaler" User die Software installieren...
Also unter Linux gibt es schon mal keine Probleme... Da kommt es eh darauf an, wohin bzw. mit welchen Rechten die Anwendung installiert wurde....
Werde das ganze die Tage unter Windows testen..
Bis jetzt mache ich das folgendermassen:
der user klickt auf 'nach updates suchen',
daraufhin wird eine ftp verbindung (QFtp) aufgemacht und auf einem ftp server eine datei 'version.txt' runtergeladen. darin enthalten ist nur ein versionsstring der aktuellesten version.
dieser wird dann mit der aktuellen (hardcodierten) version ueberprueft....
ist die aktuelle version obsolete, kann der user die neuste version downloaden (wieder mit ftp).....
die gedwonloadete version wird erst einmal unter einem anderen namen gespeichert und der user kann dann auf restart druecken.
der trick ist, ich starte mein programm nicht direkt, sondern ueber einen kleinen "starter"... der quasi den prozess startet und den exit wert beim beenden ueberprueft.... drueckt der user restart wird ein anderer exit werd returned als beim "normalen" beenden und die starter applikation wird dann das programm neu starten.
vor jedem neu start wird ueberprueft, ob eine neuere version (download) vorliegt und gegebenfalls diese auf die original kopiert.....
das funktioniert auch alles schon soweit, allerding hab ich es noch nicht unter windooof probiert...... werde es aber die tage machen und dann bericht erstatten
gruss,
nando
Verfasst: 7. November 2006 10:02
von BartSimpson
dann musste aber für jeden Nutzer das Programm extra in %HOME/Nutzer ablegen. Denn als Normalnutzer, darfste ja nix nach /usr/, /bin oder /sbin schreiben,
Verfasst: 7. November 2006 10:57
von nando
fuer linux ist das korrekt...
aber das ist ja auch okay finde ich... die anwendung kann ja auch lokal im $home des users installiert werden....
fuer windows muss ich mal schauen, aber ich bin der meinung, dass der user seine eigenen dateien ueberschreiben darf... aber das checke ich noch.
Verfasst: 7. November 2006 11:45
von BartSimpson
seine eigen schon, nur haben Anwendungen nix im $HOME verloren!!
Verfasst: 7. November 2006 13:01
von macman
Blödsinn. Bei Win und beim Mac gibt es im $Home-Verzeichnis ein Applikationsverzeichnis, was soll daran verkehrt sein? Irgendwo muss es doch hin. Unter Win finden sich die Programme dann ganz normal im Startmenü, beim Mac müssten sie im Programm-Ordner auftauchen. Ob bei Linux die $Home-Verzeichnisse jetzt etwas aufgeräumter sind, kann ich nicht sagen, hatte schon lange keins mehr unter meinen Fingern

Verfasst: 7. November 2006 13:12
von BartSimpson
Blödsinn zurück. Das Verzeichnis "Anwendungsdaten" in Benutzerverzeichnis von Windows dient mit nichten dazu dort Programm abzulegen. Dort sollen Anwenden wie der Name es schon sagt Daten ablegen z.b Parameter etc.
Verfasst: 7. November 2006 13:40
von macman
Ich rede nicht von "Anwendungsdaten", ich meine "~\Startmenü\Programme". Guck mal da rein, vielleicht liegt da schon was

Besser wäre natürlich ein richtiger Programme-Ordner und nur die Links ins Startmenü.
Verfasst: 7. November 2006 14:26
von BartSimpson
In diesem Ordner sollen nur Verknüpfungen, jedoch keine echten Programme:)