Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

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)

ZYLAGON 14. Aug 2020 13:50

AW: Programmupdate bei geöffneter EXE
 
Habe gestern auch auf Launcher-Programm umgestellt.
Danke für den Input.

VG ZYL

himitsu 14. Aug 2020 14:26

AW: Programmupdate bei geöffneter EXE
 
Ich hatte vor 'ner Weile eine Launcher-Batch gebastelt.

Es gab Probleme mit einem Netzwerk.
Die EXE wird eigentlich direkt auf der Freigabe gestartet, aber dort wurde das nun in ein lokales Verzeichnis kopiert und von dort gestartet,
aber die aktuellen Dateien sollen automatisch von der Freigabe kommen

Delphi-Quellcode:
\\NAS\MyPfad\MyProgramm.exe -parameter


Delphi-Quellcode:
C:\MyPfad\MyProgramm.local.cmd \\NAS\MyPfad -parameter


Eventuel aktive Instanz wird beendet.
Das Verzeichnis wird synchronisiert. (XCOPY)
> XCOPY hat im TestSystem aber einen Nachteil, denn Dateien können nur neuer werden
Delphi-Quellcode:
>
, aber nicht mehr älter
Delphi-Quellcode:
<>
, wenn man eine ältere Version zurücksetze, will.
Und die EXE gestartet > Parameter werden durchgereicht, abgesehn vom 1. Parameter.

Als manuellen Link auf dem Desktop
und nochmal in der Aufgabenplanung, wo täglich neu gestartet wird.

Ist eine böse BATCH, mit integrierter EXCLUDE-Datei für's XCOPY. (nur eine Datei, statt Zwei)
Code:
@PROMPT @@$G$S
CD /D "%~dp0"

REM
REM example: "E:\xxxxx\xxxxx.local.cmd" \\MY-NAS\xxxxx\ -irgendwelche -Parameter
@REM example as single-line command without batch: CMD /C "CD /D "E:\xxxxx"&&TASKKILL /F /IM xxxxx.exe&&ECHO Temp\>xcopy_exclude.txt&&ECHO Backup>>xcopy_exclude.txt&&ECHO xxxxxSrv*.ini>>xcopy_exclude.txt&&XCOPY \\MY-NAS\xxxxx\* .\ /D /S /E /H /R /C /G /K /Z /V /Y /EXCLUDE:xcopy_exclude.txt&&DEL xcopy_exclude.txt&&START "" /B xxxxx.exe -irgendwelche -Parameter

@SET ERR=0

@ECHO.
@ECHO #Source: %~1
@ECHO #Local: %~dp0
@IF NOT EXIST "%~1\xxxxx.exe" ( ECHO source-directory does not exist && SET ERR=1 )
@IF NOT EXIST "%~dp0\xxxxx.exe" ( ECHO local-directory is not correct && SET ERR=2 )
@IF NOT %ERR% == 0 GOTO error

TASKKILL /F /IM xxxxx.exe 2>NUL

@TITLE Download FileUpdates from %~1
XCOPY "%~1\*" "%~dp0" /D /S /E /H /R /C /G /K /Z /V /Y /EXCLUDE:%~f0
@IF ERRORLEVEL 2 SET ERR=3

@TITLE Start xxxxx.exe
SHIFT /1
START "" /B xxxxx.exe %*
@IF ERRORLEVEL 9059 SET ERR=4

@IF NOT %ERR% == 0 GOTO error
@TIMEOUT /t 5
EXIT /B

:error
@TIMEOUT /t 300
EXIT %ERR%

*** COPY-ExcludeList ***
xxxxx.xxx
xxxxx.ini
Backup
Temp\
.7z
.zip
Mit MyProgramm.exe und MyProgramm.cmd könnte man die hartcodierten Namen durch %~f0.exe ersetzen. (Namen wurden durch xxxx ersetzt)

Man könnte die Copy-Source aber z.B. auch in der CMD oder z.B. einer INI oder der Registry speichern, dann bräuchte man den Parameter nicht.

haentschman 15. Aug 2020 07:39

AW: Programmupdate bei geöffneter EXE
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...:P
Danke an Alle.

Zitat:

Soll
1. Die EXE soll ausgetauscht werden ohne die gestarten Instanzen abzuwürgen.
Zitat:

TASKKILL /F /IM xxxxx.exe 2>NUL
...paß nicht. :zwinker:

Ich habe eine Lösung für mich:
1. Build
2. Nach Build:
Consolenprogramm ->
1: Rename der EXE
2: Kopie in einen Ordner (benannt mit den Dateieigenschaften "V_19_20200814_1500") Damit kiegt jede gestartete Instanz seinen eigenen Ordner
3: Kopie des neuen Programms in den Original Ordner

Start über Lauchcher:
1: Prüfung welche Instanzen nicht mehr aktiv sind -> Entfernung des Ordners
2: Start der EXE

In EXE:
1: Prüfung auf neueste Version (Thread) -> optischer Hinweis ("es gibt was Neues")

Vorteile:
1: Da die EXE gleich heißt ist das angepinnte Symbol in der TNA immer noch angepinnt
2: Ich kann 5x hintereinander ein Update einspielen...jeder Neustart kriegt die neueste Version
3: Alle anderen Instanzen laufen normal weiter...mit Hinweis :thumb:

Nachteile:
1: Bei DB Änderungen müssen alle raus. Das ist aber verträglich. :zwinker:

himitsu 15. Aug 2020 15:57

AW: Programmupdate bei geöffneter EXE
 
Zitat:

...paß nicht.
Ist dort aber auch Absicht. :stupid:

Mit dynamisch geladenen DLLs und BPLs geht es einfach nicht anders.


Auch wenn es nur eine EXE/DLL ist, oder wo bei Verwendung von BPLs immer alles beim Programmstart geladen wird (niemals dynamisch nachladen),
selbt dann sollte man besser niemals ohne IMAGE_FILE_NET_RUN_FROM_SWAP und IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP ein derartiges Update machen.

http://docwiki.embarcadero.com/RADSt...flags_(Delphi)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr.
Seite 4 von 4   « Erste     234   

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