AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programmupdate bei geöffneter EXE

Ein Thema von haentschman · begonnen am 12. Aug 2020 · letzter Beitrag vom 15. Aug 2020
Antwort Antwort
Seite 4 von 4   « Erste     234   
ZYLAGON

Registriert seit: 11. Nov 2015
50 Beiträge
 
Delphi 10.3 Rio
 
#31

AW: Programmupdate bei geöffneter EXE

  Alt 14. Aug 2020, 14:50
Habe gestern auch auf Launcher-Programm umgestellt.
Danke für den Input.

VG ZYL
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#32

AW: Programmupdate bei geöffneter EXE

  Alt 14. Aug 2020, 15:26
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

\\NAS\MyPfad\MyProgramm.exe -parameter

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 > , aber nicht mehr älter <> , 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.
$2B or not $2B

Geändert von himitsu (14. Aug 2020 um 15:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#33

AW: Programmupdate bei geöffneter EXE

  Alt 15. Aug 2020, 08:39
Moin...
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.

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

Nachteile:
1: Bei DB Änderungen müssen alle raus. Das ist aber verträglich.
Miniaturansicht angehängter Grafiken
build.png  

Geändert von haentschman (15. Aug 2020 um 08:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#34

AW: Programmupdate bei geöffneter EXE

  Alt 15. Aug 2020, 16:57
Zitat:
...paß nicht.
Ist dort aber auch Absicht.

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)
$2B or not $2B

Geändert von himitsu (15. Aug 2020 um 17:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
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