Hey,
ich hab schon ein bischen gegoogelt zu diesem Thema aber nicht wirklich was gefunden.
Ich würde gerne ein Programm, was ich geschrieben habe, updaten und zwar mit einer update funktion intern. Also man klickt einen Button und denn wird gecheckt obs ne neue Version gibt und die wird dann runtergeladen und installiert.
Soweit zur Theorie, ich denke mal das es in Python funktioniert, nur wie sieht es aus wenn das ganze ding als *.exe läuft und unter Mac OSX als *.app
Könnt ihr mir eventuell weiterhelfen wie man sowas aufbaut, vllt hat jemand ein Script. Wie mach ich das mit den Versionen, damit das Programm weiß das ein neues Release vorhanden ist.
Wie führe ich das Updaten selbst aus. Soll ja aus dem Programm heraus geschehen.
Wäre echt super wenn ihr mit Tipps gebt wie man sowas am sinnvollsten und besten löst.
Vielen Dank schonmal im Vorraus
Grüße
Scyks
Python Programm updaten
Heyho,
meistens funktionieren "Updates" so, dass ein Service oder ein seperates Updatetool den eigentlichen Vorgang der Aktualisierung vornehmen.
Man kann es z.B. so gestallten, dass die Hauptanwendung selbst die Updateprüfungen (manuell oder auch schedulled) und den Download durchführt, dann einen Updater startet, sich beendet und das so eben gestartete Tool seine Arbeit verrichten lässt.
Da die eigentliche Anwendung erst beendet sein muss, bevor der Updateprozess vollführt werden sollte (darf), muss der Updater entweder zeitlich verzögert die Aktualisierung ausführen (unsicher) oder besser auf die "Beendigung" der Hauptanwendung prüfen (aufwendiger, aber zu empfehlen).
---
Edit:
Der Vorteil eines permanent laufenden Updater-Services wäre zudem, dass man im Hintergrund (ohne laufende Hauptanwendung) auf Update-Requirements prüfen und notifizieren kann. Nachteil ist natürlich ein weiterer, Speicher belegender Service mit möglicherweise lästigen und ungewollten Internet-Polls. Soetwas sollte man folglich am besten "konfigurierbar" gestallten.
>>Masaru<<
meistens funktionieren "Updates" so, dass ein Service oder ein seperates Updatetool den eigentlichen Vorgang der Aktualisierung vornehmen.
Man kann es z.B. so gestallten, dass die Hauptanwendung selbst die Updateprüfungen (manuell oder auch schedulled) und den Download durchführt, dann einen Updater startet, sich beendet und das so eben gestartete Tool seine Arbeit verrichten lässt.
Da die eigentliche Anwendung erst beendet sein muss, bevor der Updateprozess vollführt werden sollte (darf), muss der Updater entweder zeitlich verzögert die Aktualisierung ausführen (unsicher) oder besser auf die "Beendigung" der Hauptanwendung prüfen (aufwendiger, aber zu empfehlen).
---
Edit:
Der Vorteil eines permanent laufenden Updater-Services wäre zudem, dass man im Hintergrund (ohne laufende Hauptanwendung) auf Update-Requirements prüfen und notifizieren kann. Nachteil ist natürlich ein weiterer, Speicher belegender Service mit möglicherweise lästigen und ungewollten Internet-Polls. Soetwas sollte man folglich am besten "konfigurierbar" gestallten.
>>Masaru<<
Vielen Dank für deine Antwort Masaru, jedoch stellt sich mir nun die Frage, wie man es hinbekommt aus einem aktuellen Programm ein neues zu öffnen und sich selbst zu beenden, so dass der Update vorgang durchlaufen kann.
Im Prinzip hätte ich dann eine *.exe datei die die Setup routine macht und der kann ich eben die neuen Features mitgeben. das ist ganz plausibel.
Aufm Mac is das aber n bischen anders, da nutze ich ein *.dmg File welches die *.app beinhaltet die man dann von hand in den Applications order legen muss. Wie macht man dies dort? rein theo könnte ich dort über einen prozess die neuen dateien hinkopieren, (kann ich ja bei windows prinzipiell auch )
Hmm okay, frage erledigt .....
Ähm, dann zu der nächsten Frage, wie ist denn im Web der beste weg zu prüfen ob ein Update vorhanden ist?
Einfach per directoryListing in einen Ordner springen und nach nem neuen Update Ordner checken?
Habt ihr dazu noch tipps?
Im Prinzip hätte ich dann eine *.exe datei die die Setup routine macht und der kann ich eben die neuen Features mitgeben. das ist ganz plausibel.
Aufm Mac is das aber n bischen anders, da nutze ich ein *.dmg File welches die *.app beinhaltet die man dann von hand in den Applications order legen muss. Wie macht man dies dort? rein theo könnte ich dort über einen prozess die neuen dateien hinkopieren, (kann ich ja bei windows prinzipiell auch )
Hmm okay, frage erledigt .....
Ähm, dann zu der nächsten Frage, wie ist denn im Web der beste weg zu prüfen ob ein Update vorhanden ist?
Einfach per directoryListing in einen Ordner springen und nach nem neuen Update Ordner checken?
Habt ihr dazu noch tipps?
Nächste Frage:
Ausgangslage:
Du hast lediglich WebSpace und eine dazugehörige URL, die dir zur Verfügung stehen.
(kein eigenständiger Server mit programmierbarer WebServerSoftware, der eine RemoteFunktionalität zur Versionsabfrage oder sogar integriertem FileTransfer bietet)
Zum WebSpace hast du via FTP Zugriff und kannst Unterverzeichnisse anlegen.
URL-Update-Path:
Definiere ein (Unter)Verzeichnis, welches du für Updates deiner Anwendung(en) nutzen möchtest.
Nun ist der Zeitpunkt der Clientanwendung gekommen, immer wieder diesen Pfad pollen zu "können". Wie, wann und wodurch dies geschieht, das ist deiner Fantasie überlassen. Ob bei jedem Programmstart, per manuellem User-Anstrubs, etc.
Jedenfalls könntest du z.B: relativ einfach mit der bei Python mitgelieferten urllib2 Bibliothek diesen URL-Pfad prüfen, die Dateinamen aus der HTTP-Response ausparsen und dann die aktuellste Version ermitteln lassen.
Hast du festgestellt, dass eine Datei im URL-Download-Pfad aktueller von der Dateiversion her als deine Software ist, dann kannst du diese auf ähnlichem Wege downloaden und wie bereits erwähnt einen eigenen Updater als seperaten Prozess starten und den eigenen Prozess beenden. Dann hoffst du, dass dieses Tool die Hauptanwendung mit der gedownloadeten neuen Version (oder Patches, etc.) aktualisiert *g*.
Ist die Aktualisierung erfolgreich durchlaufen, könnte der Updater z.B. wiederrum (nach z.B. PopUp Anfrage und Bestätigung seitens des Benutzers) die Hauptanwendung starten und sich final beenden.
Noch vielleicht zwei Tipps:
... tjoa, nehmen wir einmal an, das Update-Szenario sieht wie folgt aus ...Scyks hat geschrieben:... Ähm, dann zu der nächsten Frage, wie ist denn im Web der beste weg zu prüfen ob ein Update vorhanden ist? ...
Ausgangslage:
Du hast lediglich WebSpace und eine dazugehörige URL, die dir zur Verfügung stehen.
(kein eigenständiger Server mit programmierbarer WebServerSoftware, der eine RemoteFunktionalität zur Versionsabfrage oder sogar integriertem FileTransfer bietet)
Zum WebSpace hast du via FTP Zugriff und kannst Unterverzeichnisse anlegen.
URL-Update-Path:
Definiere ein (Unter)Verzeichnis, welches du für Updates deiner Anwendung(en) nutzen möchtest.
- z.B.: http://...<meine Url>.../ <anwendungsname>/download/
- z.B.: http://...<meine URL>.../<anwendungsname>/download/myapplication_1.0.zip
Nun ist der Zeitpunkt der Clientanwendung gekommen, immer wieder diesen Pfad pollen zu "können". Wie, wann und wodurch dies geschieht, das ist deiner Fantasie überlassen. Ob bei jedem Programmstart, per manuellem User-Anstrubs, etc.
Jedenfalls könntest du z.B: relativ einfach mit der bei Python mitgelieferten urllib2 Bibliothek diesen URL-Pfad prüfen, die Dateinamen aus der HTTP-Response ausparsen und dann die aktuellste Version ermitteln lassen.
Hast du festgestellt, dass eine Datei im URL-Download-Pfad aktueller von der Dateiversion her als deine Software ist, dann kannst du diese auf ähnlichem Wege downloaden und wie bereits erwähnt einen eigenen Updater als seperaten Prozess starten und den eigenen Prozess beenden. Dann hoffst du, dass dieses Tool die Hauptanwendung mit der gedownloadeten neuen Version (oder Patches, etc.) aktualisiert *g*.
Ist die Aktualisierung erfolgreich durchlaufen, könnte der Updater z.B. wiederrum (nach z.B. PopUp Anfrage und Bestätigung seitens des Benutzers) die Hauptanwendung starten und sich final beenden.
Noch vielleicht zwei Tipps:
- 1. Lass alle Schritte, Fehler und auch erfolgreichen Stati von deinem Updater in Dateilogs schreiben !!!
2. Backup immer vor dem Update den aktuellen Stand (niemand ist erfreut, wenn einem ein Update die Anwendung oder gar schlimmer die Daten dahinter auf nimmer wiedersehen zerschiesst) !!!
Zuletzt geändert von Masaru am Montag 4. Februar 2008, 12:44, insgesamt 1-mal geändert.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Scyks!
Du kannst z.B. so ein Updateprogramm starten und direkt danach das eigene Programm beenden.
meinprogramm.py:
updateprogramm.py:
mfg
Gerold
Du kannst z.B. so ein Updateprogramm starten und direkt danach das eigene Programm beenden.
meinprogramm.py:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import os
import sys
import subprocess
import time
filename = os.path.abspath("updateprogramm.py")
subprocess.Popen([sys.executable, filename])
sys.exit(0)
for i in range(2):
print "Dieser Code wird nicht mehr ausgefuehrt"
time.sleep(1)
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import time
for i in range(3):
print "Ich bin das Updateprogramm"
time.sleep(2)
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.