Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   PostBuild mit Pause im Batch funktioniert nicht richtig (https://www.delphipraxis.net/216520-postbuild-mit-pause-im-batch-funktioniert-nicht-richtig.html)

haentschman 10. Jan 2025 10:44


PostBuild mit Pause im Batch funktioniert nicht richtig
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...8-)

Im Postbuild soll die Datei (bat) die Signierung durchführen. Jedes Mal beim Ausführen ist die Datei noch in Benutzung!. :roll: Deswegen habe ich 5 Sekunden Timeout eingestellt (timeout /T 5).
Problem:
Der TimeOut wird im Postbuild ignoriert. Wenn ich die Date normal starte, läuft sowohl der Timeout und die Signierung anstandlos durch...:gruebel:

Danke für Infos...

DeddyH 10. Jan 2025 10:49

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Dann schreib die Befehle doch eine eine Batch-Datei und starte diese stattdessen, IIRC hab ich das auch schon einmal so gemacht.

haentschman 10. Jan 2025 10:55

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Zitat:

Dann schreib die Befehle doch eine eine Batch-Datei und starte diese stattdessen
Ich habe eine "Release.bat" mit dem Inhalt aus dem ersten Post. Die Ausführung der BAT ist im PostBuild eingetragen. (BAT läßt sich nicht hochladen, deshalb TXT) :zwinker:

DeddyH 10. Jan 2025 10:56

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Also in Deinem PostBuild-Ereignis steht als Aufruf <Pfad>\Release.bat?

haentschman 10. Jan 2025 10:59

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Zitat:

Also in Deinem PostBuild-Ereignis steht als Aufruf <Pfad>\Release.bat?
ja...:wink:

DeddyH 10. Jan 2025 10:59

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Dann hab ich gerade leider auch keine Idee.

haentschman 10. Jan 2025 11:00

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Danke :wink:

dummzeuch 10. Jan 2025 11:09

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Wenn in einem Build Event mehrere Batchdateien aufgerufen werden sollen, muss man sie mit call aufrufen, sonst wird nur die erste ausgeführt. Liegt's evtl. daran?

haentschman 10. Jan 2025 11:11

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Liegt's evtl. daran?
1. es ist nur eine BAT im PostBuild
2. es werden alle Zeilen der BAT ausgeführt...nur nicht "timeout" :?

PS: Es gab auch Momente, wo das PostBuild direkt komplett fehlerfrei durchlief. Ist aber gaaanz selten.


Nachtrag:
Beim Erzeugen des Bildes der Fehlermeldung ist mir aufgefallen:
1. Der Fehler tritt nur auf wenn die Zieldatei NICHT existiert.
2. Wenn ich normal erzeuge, mit Ziel vorhanden, wird die Batch fehlerfrei ausgeführt. :shock:

...das erklärt aber nicht die Frage mit dem TimeOut. Es sollte 5 Sekunden gewartet werden, aber die Signierung startet sofort.

Delphi.Narium 10. Jan 2025 11:20

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Mal 'ne abgewandelte Version der Batch:

Code:
@echo %date% %time%>%temp%Error.log

timeout /T 5 /nobreak >>%temp%Error.log

if errorlevel 1 (
    echo Fehler beim Aufruf von TimeOut.>>%temp%Error.log
    exit /b 1
)

if not exist "E:\Projects\Projects_Delphi\Tools\Tasks\_out\app\Release\Task.exe" (
    echo Task.exe nicht gefunden.>>%temp%Error.log
    exit /b 1
)

E:\Projects\Projects_Delphi\Certificate\Tools\signtool.exe sign /v /s "Certificate Store" /n "Signierung" /fd SHA256 "E:\Projects\Projects_Delphi\Tools\Tasks\_out\app\Release\Task.exe"
if errorlevel 1 (
    echo Signierung fehlgeschlagen.>>%temp%Error.log
    exit /b 1
)

E:\Projects\Projects_Delphi\Certificate\Tools\signtool.exe verify /pa /v "E:\Projects\Projects_Delphi\Tools\Tasks\_out\app\Release\Task.exe"
if errorlevel 1 (
    echo Verifizierung fehlgeschlagen.>>%temp%Error.log
    exit /b 1
)

echo Signierung und Verifizierung erfolgreich abgeschlossen.>>%temp%Error.log
Was steht in der Error.log im Tempverzeichnis?

Sherlock 10. Jan 2025 11:30

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Knapp am Thema vorbei: Für wirklich korrekte Signaturen wird auch die Option /tr benötigt. Vgl. https://learn.microsoft.com/de-de/do...s/signtool-exe

haentschman 10. Jan 2025 12:25

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Zitat:

Für wirklich korrekte Signaturen
...ist eine selbsterstellte Signatur für nur Intern. :zwinker:

Uwe Raabe 10. Jan 2025 15:51

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Schau mal in das Ausgabe-Log der IDE nach dem Build. Dort müsste beim timeout Befehl folgende Fehlermeldung erscheinen:
Code:
FEHLER: Die Eingabeumleitung wird nicht unterstützt. Prozess wird unverzüglich beendet.
Wenn es nicht darauf ankommt, dass die IDE auf das Signieren wartet, dann kannst du im Build-Event diesen Befehl eintragen:
Code:
start cmd /C <Pfad>\Release.bat

Uwe Raabe 10. Jan 2025 16:32

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1545049)
Wenn es nicht darauf ankommt, dass die IDE auf das Signieren wartet

Wenn es doch drauf ankommen sollte, kannst du auch den WaitFor-Befehl missbrauchen und auf ein nicht kommendes Signal warten:
Code:
waitfor /T 5 pause > nul

haentschman 20. Jan 2025 14:26

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Was lange währt wird gut.
Code:
waitfor /T 5 pause > nul
...jetzt wird anstandslos gewartet und die Signierung läuft durch. :zwinker:

himitsu 20. Jan 2025 15:01

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Eigentlich wartet WAITFOR auf ein bestimmtes Signal und der Timeout-Parameter ist für einen "vorzeitigen" Abbruch vorhaden.
Wenn das Signal aber vorher/sofort kommt, dann wird natürlich nicht so lange gewartet.

TIMEOUT ist der Befehl zum Warten. (auch wenn man immernoch zu oft den "Hack" mit PING findet)



Ich würde in den Scripten immer ein EXIT machen (oder das ErrorLevel/ExitCode setzen), sowohl bei Fehlern, als auch beim OK mit 0.
(außer beim Event ist eingestellt, dass die Rückgabe nicht behandelt wird)

Zitat:

Zitat von haentschman (Beitrag 1545012)
Im Postbuild soll die Datei (bat) die Signierung durchführen. Jedes Mal beim Ausführen ist die Datei noch in Benutzung!. :roll: Deswegen habe ich 5 Sekunden Timeout eingestellt (timeout /T 5).

Wir fummeln im AfterBuild auch an der EXE/DLL/BPL rum und hatten noch nie ein Problem, dass die Datei noch im Zugriff ist (seitens Delphi), auch ohne ein Timeout. :gruebel:

Uwe Raabe 20. Jan 2025 15:14

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Zitat:

Zitat von himitsu (Beitrag 1545427)
Eigentlich wartet WAITFOR auf ein bestimmtes Signal und der Timeout-Parameter ist für einen "vorzeitigen" Abbruch vorhaden.
Wenn das Signal aber vorher/sofort kommt, dann wird natürlich nicht so lange gewartet.

Deswegen schrieb ich ja auch:
Zitat:

Zitat von Uwe Raabe (Beitrag 1545052)
auf ein nicht kommendes Signal warten


himitsu 20. Jan 2025 16:02

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Bei soeinem allgemeinen Bezeichner, wie "pause", wäre ich mir da nicht 100% sicher, dass er nicht doch mal verwendet werden könnte.

Diesbezüglich stellt TIMEOUT mit /nobreak für mich irgendwie eine sicherere Variante dar.

Uwe Raabe 20. Jan 2025 16:51

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Zitat:

Zitat von himitsu (Beitrag 1545432)
Diesbezüglich stellt TIMEOUT mit /nobreak für mich irgendwie eine sicherere Variante dar.

So wie die IDE den Befehl ausführt, funktioniert das ja eben nicht:
Zitat:

Zitat von Uwe Raabe (Beitrag 1545049)
Code:
FEHLER: Die Eingabeumleitung wird nicht unterstützt. Prozess wird unverzüglich beendet.


himitsu 20. Jan 2025 16:59

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Befehle direkt innerhalb der IDE, sowie MSBuild, haben sowieso viele Probleme (vor allem sowas if ERRORLEVEL kann man da vergessen),
aber innerhalb einer Batch sollte es doch gehn? :gruebel:

Uwe Raabe 20. Jan 2025 17:37

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Offenbar nicht wenn die Batch den Input/Output umleitet.

Delphi.Narium 20. Jan 2025 17:55

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Code:
echo.|timeout /t 5 1>Ausgabe.txt 2>Fehler.txt
führt zur Fehlermeldung
Code:
FEHLER: Die Eingabeumleitung wird nicht unterstützt. Prozess wird unverzüglich beendet.
Code:
timeout /t 5 1>Ausgabe.txt 2>Fehler.txt
funktioniert jedoch.

Daraus schließe ich: Bei der Verwendung von TimeOut darf die Eingabe (StdIn) nicht umgeleitet werden.

Wenn die IDE beim Aufruf einer Batchdatei StdIn umleitet, wird der Aufruf von TimeOut in der Batchdatei scheitern.

Uwe Raabe 20. Jan 2025 21:05

AW: PostBuild mit Pause im Batch funktioniert nicht richtig
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1545442)
Wenn die IDE beim Aufruf einer Batchdatei StdIn umleitet, wird der Aufruf von TimeOut in der Batchdatei scheitern.

Da im IDE log die besagte Meldung erscheint, wird sie das wohl tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.

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