Ich muss meine Anwendung von einem zentralen Server aktualisieren.
Die Anwendung prüft immer, ob es sich um eine korrekte Version handelt, gegen die Serverinstallation.
Wenn das nicht der Fall ist, muss ich es aktualisieren.
Wie kann ich die EXE kopieren, wenn sie läuft? Welche Lösung habe ich?
Wie Sie an allen Antworten sehen können, gibt es keinen festen Weg, dies zu tun, also dachte ich, ich würde hinzufügen, wie wir das erfolgreich gemacht haben.
Wir machen dies mit einem Anwendungs-Launcher. Es lädt eine XML-Datei herunter, die CRC- und Versionsressourcenwerte für die Anwendungsdateien enthält. Die XML-Datei wird während des Bereitstellungsprozesses in einem FinalBuilder-Skript erstellt.
Die Anwendung vergleicht dann die XML-Datei mit lokalem Inhalt und kopiert benötigte Dateien herunter. Schließlich starten wir dann die betreffende Anwendung. Dies hat sich gut für die Bereitstellung einer Anwendung bewährt, die etwa 300 lokalen Benutzern dient. Vor kurzem haben wir von einer Dateikopie zu einem HTTP-Download gewechselt, da wir Probleme beim Trennen der Laufwerke von entfernten Benutzern feststellen konnten.
Wir bauen immer noch Installationen (mit Innosetup), um die grundlegenden erforderlichen Dateien bereitzustellen.
Ich benenne die aktuelle ausführbare Datei in MyTempExe.exe um, kopiere die neue exe an den richtigen Ort (fordere ggf. erhöhte Rechte an) und führe dann eine separate App aus, um die Haupt-App neu zu starten. Beim Start überprüfe ich, ob MyTempExe.exe es löscht, wenn es dort ist.
Der Grund, warum ich eine separate App für den Neustart verwende, ist, dass ich keinen festen Zeitrahmen für das Beenden der App habe und warten muss, bis alles beendet ist. Beim Herunterfahren schreibt sie Informationen auf die Festplatte Aktueller Status, den die aktualisierte App verwendet, um den alten Stand fortzusetzen.
Ich weiß nicht, ob es die beste Lösung ist, aber es ist diejenige, die ich verwende.
Verpacken Sie Ihre App mit einem Installationsprogramm wie Inno. Laden Sie das Installationsprogramm herunter und führen Sie es aus. Lassen Sie das Installationsprogramm Ihre App suchen und beenden oder weisen Sie den Benutzer an, sie zu schließen. Das Setup wird Ihre .exe ersetzen, und wenn die App nicht beendet werden kann oder der Benutzer nicht kooperativ ist, gibt es eine Neustartmeldung aus.
taskkill /PID %process id of running EXE%
copy %new EXE% %running EXE%
%EXE%
Ich verwende TMS TWebUpdate selbst, um Software-Updates zu erhalten. Der Vorteil ist, dass Sie eine Menge zusätzlicher Aktionen in das Skript einfügen können, wenn Sie etwas anderes als normale EXE-Updates benötigen.
Ich habe zwei Komponenten bei der Arbeit die Anwendung selbst ausführbar und einen Web-Service (SOAP), der Versionsdetails und Dateidownloads bietet.
Die Anwendung ruft eine Methode für den SOAP-Service auf, um nach der Anzahl der Dateien im Projekt zu fragen (das Projekt wird normalerweise unter Verwendung der Datei application.exename identifiziert).
Der Soap-Service erhält seine Informationen aus einer INI-Datei, die Einträge wie folgt enthält:
[Projektname]
NumberOfFiles = 2
Datei1 = myapp.exe; 1.0.0.1
Datei2 = mydll.dll; 1.0.0.2
Sie aktualisieren diese Datei gleichzeitig mit dem Hochladen Ihrer neuen Dateien.
Der Prozess der Aktualisierung der Anwendung dieses:
Anzahl der im Webservice verfügbaren Dateien abrufen
Für jede Datei fragt die Anwendung den Namen und die Versionsnummer vom SOAP-Server ab.
Die Anwendung vergleicht diese Informationen mit ihren eigenen Versionsinformationen und entscheidet, ob die Datei aktualisiert werden muss, und erstellt eine lokale Liste von Dateien, die aktualisiert werden müssen.
Für jede Datei, die aktualisiert werden muss, lädt die Anwendung die Datei nach dateiname.ext.new
Schließlich benennt die Anwendung alle filename.ext in filename.ext.old um und benennt filename.ext.new in filename.ext um und startet sich dann neu. (Keine Notwendigkeit für eine externe App, um Ihr eigenes Programm neu zu starten).
Hinweis 1: Je nach Installationsort Ihrer Dateien müssen Sie möglicherweise eine Erhöhung der Dateien anfordern.
Hinweis 2: seien Sie freundlich zu Ihren Benutzern, denken Sie sorgfältig nach, bevor Sie Updates für Benutzer erzwingen.
Hinweis 3: Sie können eine laufende exe nicht löschen, aber Sie können sie umbenennen und dann die neue Version neu starten.
Bearbeiten ===
Für einige Referenzdatendateien, die keine Versionsinformationsressourcen enthalten können, können Sie Dateien wie File99 = MyDataFile haben, 1.1.2011 die 3 Elemente der Versionsnummer zeigen dem Client an, dass er das Dateidatum / den Stempel überprüfen soll.
Sie könnten eine separate Update-Datei haben, deren Aufgabe darin besteht, die Serverversion zu überprüfen, gegebenenfalls eine aktualisierte ausführbare Datei herunterzuladen und dann die lokale ausführbare Datei auszuführen.
Oder Sie können eine ausführbare Datei in zwei verschiedenen Modi ausführen lassen: 1. Beim Start auf ein Update prüfen, falls vorhanden, die ausführbare Datei in ein Download-Verzeichnis herunterladen, ausführen und beenden. 2. Die neue ausführbare Datei überprüft, ob sie vom Installationsverzeichnis aus ausgeführt wird, andernfalls kopiert sie sich selbst, überschreibt die alte Version, startet die Kopie von dort und beendet sie.
Mein Weg ist umgekehrt: Wenn eine neue Version online ist, fordere den Benutzer auf zu aktualisieren. Wenn er will (oder gezwungen wird ...), beende ich die App und starte eine neue exe (Updater). Dieser Updater lädt das Update und ersetzt die alte exe (wird nicht ausgeführt). dann startet es die neue exe. bereit. (Sie können natürlich auch andere Dateien ersetzen.) ABER: Mit einem Installer wie InnoSetup haben Sie mehr Möglichkeiten und mischen sich nicht mit dem regulären Deinstallationsprogramm, also ist es wirklich besser ...
Sie können dies tun, ohne eine andere Anwendung auszuführen. Übertragen Sie die Updates während der Ausführung vom Server auf den Client und speichern Sie sie in einem temporären Verzeichnis auf dem Client. Wenn Sie ein Upgrade durchführen möchten, verschieben Sie alle laufenden Dateien in ein anderes temporäres Verzeichnis, verschieben Sie die neuen Dateien in das ursprüngliche Anwendungsverzeichnis und starten Sie die Anwendung beim Herunterfahren einfach mit dem Standardnamen der ausführbaren Datei.
Ich aktualisiere Client-Anwendungen, die auf unbeaufsichtigten Maschinen laufen, automatisch auf diese Weise.
Tags und Links delphi