Download via FTP -> Automatisches Software Update mit QT4

Alles rund um die Programmierung mit Qt
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Download via FTP -> Automatisches Software Update mit QT4

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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,
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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)
c_m
Beiträge: 15
Registriert: 9. Juni 2006 23:13
Kontaktdaten:

Beitrag 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.
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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,
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

seine eigen schon, nur haben Anwendungen nix im $HOME verloren!!
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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 :-)
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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ü.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

In diesem Ordner sollen nur Verknüpfungen, jedoch keine echten Programme:)
Antworten