Halt nehme ich da es
1. Die
VCL auch von selbst so macht (siehe weiter unten)
2. Ich keine andere Möglichkeit kenne die Units finalisieren zu lassen
Einfach mal ausprobieren und ich wette, da kommt etwas zurück
Uh,
nein, da kommt gar nichts zurück. Die
Vcl sagt standardmäßig:
Delphi-Quellcode:
Vcl.Forms.TApplication.WndProc(..)
begin
[...]
WM_ENDSESSION:
begin
[...]
if EndSessionMsg.EndSession
then begin
Application.Terminate;
Halt;
end;
[...]
end;
Halt
ist, soweit ich weiß, die einzige Möglichkeit, die
Unit-Finalisierung aufzurufen.
System.Halt sagt:
Delphi-Quellcode:
procedure _Halt0;
begin
[...]
FinalizeUnits;
[...]
WinApi.Windows.ExitProcess(ExitCode);
end;
Eine
VCL-Anwendung antwortet somit nie auf ein
WM_ENDSESSION
, sondern schießt sich vorher ab. Klingt komisch, ist aber doch völlig legitim. Ich denke eher das Abräumen der Formulare sorgt dafür dass Windows denkt "So, der ist ja durch. Weg mit dem".
Ich versuche mal, schon alle Formulare in
WM_QUERYENDSESSION
zu zerstören. Vielleicht bringt das ja was...