Alternativ könnte ich das ja auch hinter das "Application.Run" setzen (was ich nun auch gemacht habe...). Das ist dann der letztmöglich Zeitpunkt.
Die
finalization Abschnitte der Units werden noch später ausgeführt. Den spätesten Zeitpunkt den du damit noch erreichen könntest, wäre das
finalization einer minimalen
Unit, die im Projekt als erstes in der Uses-Anweisung steht.
Zu dem Zeitpunkt sind auch alle Forms und sonstige Komponenten der Anwendung freigegeben, was direkt nach dem Run in der Regel noch nicht der Fall ist.
So eine
Unit könnte in etwa so aussehen:
Delphi-Quellcode:
unit AutoRestartUnit;
interface
var
AutoRestart: Boolean = False;
AutoRestartCmdLine: PChar;
implementation
uses
Winapi.ShellAPI,
Winapi.Windows;
initialization
AutoRestartCmdLine := CmdLine;
finalization
if AutoRestart
then begin
ShellExecute(0, '
open', PChar(ParamStr(0)), AutoRestartCmdLine,
nil, SW_SHOW);
end;
end.