Frage

Was ist der beste Weg, ein Programm zu beenden und dann zusätzlichen Code aus dem Programm auszuführen, das beendet wird?Was wäre zum Beispiel der beste Weg für ein Programm, sich selbst zu aktualisieren?

War es hilfreich?

Lösung

Sie haben mehrere Möglichkeiten:

Sie können eine andere .exe-Anwendung verwenden, um die automatische Aktualisierung durchzuführen.Dies ist wahrscheinlich die beste Methode.

Sie können die EXE-Datei eines Programms auch umbenennen, während es ausgeführt wird.Dadurch können Sie die Datei von einem Update-Server abrufen und ersetzen.Beim nächsten Start des Programms wird die neue EXE-Datei verwendet.Anschließend können Sie die umbenannte Datei beim Start löschen.

Andere Tipps

Das wäre es Wirklich hilfreich zu wissen, um welche Sprache es sich hier handelt.Ich bin mir sicher, dass ich Ihnen ein paar wirklich tolle Tipps geben könnte, wie Sie dies in PowerBuilder oder Cobol tun können, aber das ist vielleicht nicht wirklich das, wonach Sie suchen!Wenn Sie jedoch Java sprechen, können Sie einen Shutdown-Hook verwenden – funktioniert bei mir hervorragend.

Eine weitere zu berücksichtigende Sache ist, dass bei den meisten der „wichtigsten“ Apps, die ich verwendet habe (FileZilla, Paint.NET usw.), die Updater die vorherige Version der App deinstallieren und dann eine Neuinstallation der neuen Version durchführen der Bewerbung.

Ich verstehe, dass dies bei wirklich großen Anwendungen nicht funktioniert, aber dies scheint ein „bevorzugter“ Prozess für kleine bis mittelgroße Anwendungen zu sein.

Ich kenne keine Möglichkeit, dies ohne ein zweites Programm zu tun, das das primäre Programm vor dem Herunterfahren startet.Programm 2 lädt die Änderungen herunter, installiert sie und startet dann das Primärprogramm neu.

So etwas haben wir in unserer vorherigen App gemacht.Wir haben die Beendigung des Programms (in .NET 2.0) entweder über die Schaltfläche „X“ oder über die Schaltfläche „Schließen“ erfasst und dann einen Hintergrundaktualisierungsprozess gestartet, den der Benutzer nicht gesehen hat.Es würde den Server (Client-Server-App) auf ein Update überprüfen und, wenn eines verfügbar wäre, es im Hintergrund mithilfe von BITS herunterladen.Wenn die Anwendung das nächste Mal geöffnet wurde, erkannte sie, dass es eine neue Version gab (wir setzten eine Markierung) und öffnete eine Meldung, die den Benutzer auf die neue Version aufmerksam machte, sowie eine Schaltfläche, auf die er klicken konnte, wenn er die hinzugefügten neuen Funktionen sehen wollte zu dieser Version.

Es ist einfacher, wenn Sie eine sekundäre App haben, die ausgeführt wird, um die Updates durchzuführen.Sie würden die „Updater“-App ausführen und dann darin warten, bis der andere Prozess beendet wird.Wenn Sie Zugriff auf die regulären App-DLLs usw. benötigen, diese aber auch aktualisiert werden müssen, können Sie den Updater von einem sekundären Speicherort mit bereits aktualisierten DLLs ausführen, sodass sie am ursprünglichen Speicherort nicht verwendet werden.

Wenn Sie eine .NET-Anwendung schreiben, sollten Sie die Verwendung von ClickOnce in Betracht ziehen.Wenn Sie umfangreiche Anpassungen benötigen, sollten Sie woanders suchen.

Wir haben einen externen Prozess, der die Aktualisierung für uns durchführt.Wenn ein Update gefunden wird, lädt es es in einen sekundären Ordner herunter und wartet dann darauf, dass die Hauptanwendung beendet wird.Beim Beenden werden alle aktuellen Dateien ersetzt.Der primäre Prozess startet den Aktualisierungsprozess lediglich alle 4 Stunden.Da der Update-Vorgang auf das Beenden der primären App wartet, muss die primäre App außer dem Starten der Update-Anwendung keine besondere Verarbeitung durchführen.

Dies ist ein Nebenproblem, aber wenn Sie darüber nachdenken, Ihren eigenen Update-Prozess zu schreiben, empfehle ich Ihnen, die Verwendung einer Art Komprimierung in Betracht zu ziehen, um (1) beim Herunterladen zu sparen und (2) eine Datei bereitzustellen, die von einem Update-Server abgerufen werden kann .

Ich hoffe, das macht Sinn!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top