2016-08-27 1 views
0

Ich entwickle eine Software und möchte aus verschiedenen Gründen meine eigene Auto-Update-Funktion entwickeln. Das Programm ist eine vollständige GUI, geschrieben mit PyQt, und verwendet Icons, Datendateien usw. Es wird mit cx_freeze oder pyinstaller eingefroren.Update-Programm: Dateien überschreiben?

Der Auto-Update-Teil wird die neue Version (eine Zip-Datei) auf einem Remote-Server herunterladen. Dann wird es kompliziert:

Die Software läuft und hat die neue Version heruntergeladen. Was macht es mit der neuen Version? Kann die Software die Dateien aus der Zip extrahieren und die Dateien der laufenden Version überschreiben?

Oder sollte ich die neue Version beiseite legen, die laufende Version beenden und irgendwie die neue Version verwenden? Wenn ja, wie mache ich den Austausch zwischen der alten und der neuen Version?

EDIT:

Hier ist zum Beispiel der closeEvent Methode meiner Klasse QMainWindow:

def closeEvent(self, event): 

    """Method to perform actions before exiting. 
    Allows to save the prefs in a file""" 

    ...Do some stuff... 

    QtGui.qApp.quit() 

    self.logger.info("Closing the program") 

Kann ich diese Methode verwenden, um den Austausch zu führen?

+0

Öffnen eines Thread ohne 'deamon' alte Dateien entfernen, später neu zu extrahieren. Aber vergleichen Sie alle Konfigurationsdateien auf fehlende/ungültige Parameter. Töte natürlich alle zugehörigen Anwendungen, bevor du neu startest! – dsgdfg

+0

Ich habe meine Frage bearbeitet, um genauer zu sein, wenn es hilft. Kannst du mir zeigen, wie und wo ich den Faden öffnen soll? – Rififi

Antwort

0

Dies ist eine ähnliche question zu verkaufen und die akzeptierte Antwort, sagt:

Nachdem das Installationsprogramm für die neuere Version herunterladen, können Sie atexit.register() mit os.exec*() verwenden können, um das Installationsprogramm ausführen, z.B. atexit.register(os.execl, "installer.exe", "installer.exe"). Dadurch wird das Installationsprogramm gestartet, wenn die Anwendung ungefähr beendet wird. Die Anwendung wird sofort nach dem Aufruf os.exec*() beendet, so dass keine Wettlaufsituation auftritt.

Sieht aus wie eine gute Lösung für Ihren Anwendungsfall

Verwandte Themen