![]() |
ShellExecAndWait (JCL) mit Timeout
Hallo! Ich würde gerne die JCL Funktion ShellExecAndWait als Basis für eine Variante benutzen, die bei Überschreiten einer bestimmten Zeitspanne zurückkehrt (mit Result = False), um eine Fehlfunktion bei der Ausführung des Prozesses zu behandeln.
Natürlich geht es nicht um die 'perfekte' Lösung sondern nur um das 'gut genug' :)
Delphi-Quellcode:
Zu WaitForInputIdle habe ich den Hinweis gefunden, dass die Funktion nicht wartet, wenn es eine Konsolenanwendung ist. Meine Anwendung wird eine Konsolenanwendung sein, somit wäre eine Möglichkeit nur noch, in der folgenden while Schleife nach einer bestimmten Anzahl von Durchläufen abzubrechen.
function ShellExecAndWait(const FileName: string; const Parameters: string;
const Verb: string; CmdShow: Integer; const Directory: string): Boolean; var Sei: TShellExecuteInfo; Res: LongBool; Msg: tagMSG; begin FillChar(Sei, SizeOf(Sei), #0); Sei.cbSize := SizeOf(Sei); Sei.fMask := SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; Sei.lpFile := PChar(FileName); Sei.lpParameters := PCharOrNil(Parameters); Sei.lpVerb := PCharOrNil(Verb); Sei.nShow := CmdShow; Sei.lpDirectory := PCharOrNil(Directory); {$T+} Result := ShellExecuteEx(@Sei); {$T-} if Result then begin WaitForInputIdle(Sei.hProcess, INFINITE); while WaitForSingleObject(Sei.hProcess, 10) = WAIT_TIMEOUT do repeat Res := PeekMessage(Msg, Sei.Wnd, 0, 0, PM_REMOVE); if Res then begin TranslateMessage(Msg); DispatchMessage(Msg); end; until not Res; CloseHandle(Sei.hProcess); end; end; Was wäre aber wenn z.B. WaitForSingleObject nicht zurückkehrt? Unter ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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