Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Programmupdate bei geöffneter EXE (https://www.delphipraxis.net/205205-programmupdate-bei-geoeffneter-exe.html)

haentschman 12. Aug 2020 08:41

AW: Programmupdate bei geöffneter EXE
 
Zitat:

Ich verstehe nicht warum du es dir so schwer machst. Keep it simple, stupid.
Weil in der EXE noch ein hardgecodeter Pfad drin ist und der auf einen Unterordner des Programmverzeichnisses zeigt mit ca. 180GB Daten. :evil:

Die Trennung (Daten/EXE) ist schon beschlossene Sache...Aber alles kann ich nicht auf einmal. :?

KodeZwerg 12. Aug 2020 08:41

AW: Programmupdate bei geöffneter EXE
 
Hab grad was gelesen aber kann es nicht prüfen.
Dein "updater.exe" oder "update.bat" kann deine target.exe nicht löschen da es geöffnet ist (prozess target.exe läuft)
Aber anstelle target.exe zu löschen und eine neue target.exe da hin kopieren, soll wohl ein umbenennen funktionieren (target.exe -> target.exe.bak) während target.exe läuft.
Nun die neue updated_target.exe nach target.exe kopieren.
fertig.

sobald der pc neu startet sollte nun die aktualisierte version starten.


Meine Winapi Recherche dazu:
MoveFileExW mit "MOVEFILE_DELAY_UNTIL_REBOOT" Nutzung.
Aber ob das über Netzlaufwerke klappt = kA.

shebang 12. Aug 2020 08:42

AW: Programmupdate bei geöffneter EXE
 
Wäre ein Softlink denn keine Alternative? Da kannst du einfach das Ziel des Links ändern.

haentschman 12. Aug 2020 08:49

AW: Programmupdate bei geöffneter EXE
 
Zitat:

Aber anstelle target.exe zu löschen und eine neue target.exe da hin kopieren, soll wohl ein umbenennen funktionieren (target.exe -> target.exe.bak) während target.exe läuft.
Nun die neue updated_target.exe nach target.exe kopieren.
Zitat:

Ich mache das genau so und hab mich damit abgefunden, dass ich dass nur 1 Mal machen kann, solange noch 1 User die EXE gestartet hat.
Nach dem Umbenennen ist die EXE_ trotzdem noch in Benutzung und kann erst gelöscht werden, wenn der letzte Benutzer "raus" ist.
Ich müsste beim 2. Mal die EXE dann anders benennen (z.B. EXE_2).
...wenn einer die Umbenannte exe als Instanz hat kann man sie nicht nochmal umbenennen. :?

KodeZwerg 12. Aug 2020 09:02

AW: Programmupdate bei geöffneter EXE
 
Hmmm... dann halt, wie windows des auch macht, eine "(1)" "(2)" usw hinten ranhängen und bei neustart all diese backups killen?

Bzw Winapi mal testen :)

stahli 12. Aug 2020 09:25

AW: Programmupdate bei geöffneter EXE
 
Zitat:

Zitat von haentschman (Beitrag 1471650)
Zitat:

Ich verstehe nicht warum du es dir so schwer machst. Keep it simple, stupid.
Weil in der EXE noch ein hardgecodeter Pfad drin ist und der auf einen Unterordner des Programmverzeichnisses zeigt mit ca. 180GB Daten. :evil:

Die Trennung (Daten/EXE) ist schon beschlossene Sache...Aber alles kann ich nicht auf einmal. :?

Hmm, ich bin da beim Schönling und verstehe Dein Problem nicht...

Wenn die Nutzer MyProg.Exe starten kann dieses die höchst verfügbare Datei MyProg000.exe ... MyProg999.exe suchen, diese starten und sich selbst beenden.

Der Launcher kann sogar ältere Versionen versuchen zu löschen (was halt fehl schlägt, sofern noch Instanzen laufen).

So brauchst Du nur eine neue Version in den Pfad legen (nach Eintragung einer neue "Dateinummer") und der Rest geht automatisch.

Wenn natürlich eine neue Datenstruktur oder neue Unterordner vorausgesetzt werden, würde das nicht mehr reichen. Aber das wäre ja bei allen Lösungen so.

stifflersmom 12. Aug 2020 10:51

AW: Programmupdate bei geöffneter EXE
 
Mein Deployvorgang sieht so aus, dass ich die neue Programmversion unter einem (festen) neuen Namen in dem Verzeichnis der ursprünglichen Exe ablege.
Dann startet per Aufgabenplanung morgens um 04.00 Uhr ein kleines Batchskript, dass bei Vorhandensein der neuen Programmversion alle Instanzen der alten Exe mit Taskkill beendet und dann die alte Exe in EXENAME_JJJ_MM_TT.exe umbenennt und die Neue dann in den alten Namen umbenennt.

himitsu 12. Aug 2020 12:53

AW: Programmupdate bei geöffneter EXE
 
Zitat:

Zitat von haentschman (Beitrag 1471632)
Ich habe mir sagen lassen, daß die EXE umbenannt werden kann und die neue EXE in den Ordner kopiert werden kann.

Das kommt drauf an, wie/wo die Datei geöffnet ist.

Eine EXE wird als MMF in den Speicher geladen und das File-Handle geschlossen.
Wenn die Datei dann z.B. auf einem lokalen Laufwerk liegt, dann lässt es sich umbenennen.

Ist dazwischen aber z.B. ein umgeleitetes Verzeichnis (andere Festplatte) oder gar ein Netzlaufwerk dazwischen, dann kommt es dran an, wie dort die Dateien weitergereicht werden.


Also ja, es geht, aber nicht immer.
Schon garnicht geht es, wenn ein DateiHandle (CreateFile, TFileStream, ...) existiert, z.B. um gewisse "Ressourcen" aus der Datei zu holen,
oder der nette Vierenscanner guckt grade rein, usw.

Am Einfachstes/minimalistischsten ist wohl die Batch im Temp-Verzeichnis.
Die Batch kann ich am Ende auch selbst löschen. (wobei es im Temp-Verzeichnis auch so irgendwann bestimmt gelöscht wird)


Zitat:

wenn einer die Umbenannte exe als Instanz hat kann man sie nicht nochmal umbenennen
Lange nicht mehr probiert (zuletzt im Win7)
Aber es ist schon möglich mehrmals umzubenennen und den Platz mit neuen Dateien zu belegen und zwischendrin auch mehrmals den selben Namen wiederverwenden.

Dalai 12. Aug 2020 12:56

AW: Programmupdate bei geöffneter EXE
 
Mit Batch-Skripten oder sonstigen ausführbaren Dateien im TEMP bzw. im gesamten Nutzerprofil wäre ich vorsichtig. Sowas knallt gerade in Unternehmen ganz schnell, wenn SRPs (Software Restriction Policies) oder AppLocker eingesetzt wird.

Grüße
Dalai

Keldorn 12. Aug 2020 18:58

AW: Programmupdate bei geöffneter EXE
 
Hallo

ich mach das auch über eine starter Exe. die startet dann die eigentliche Exe und kopiert noch ein paar Dateien in lokale Verzeichnisse, hier erfolgt ein Abgleich über eine Versionsini. Die starter exe übergibt noch als Parameter das Verzeichnis und so passen auch alle Pfade. Komme gut damit klar und so auch sicherstellen, dass jeder user auf stand ist.

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz