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.
Da hast Du natürlich recht. Wobei ich mich schwer tue die "uses" des Projekts manuell zu bearbeiten. Bleibt meine
Unit dann auch oben? Üblicherweise pflegt doch die
IDE diese "uses"-Liste...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)