Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Code ausführen, bevor Prozess beendet wird (https://www.delphipraxis.net/33900-code-ausfuehren-bevor-prozess-beendet-wird.html)

Elite 14. Nov 2004 14:19


Code ausführen, bevor Prozess beendet wird
 
Hallo,
gibt es eine Möglichkeit, Code auszuführen, noch nachdem der WindowsXP-Anwender in seinem Taskmanager auf "Prozess beenden" geklickt hat? Wird irgendeine Message geschickt o.Ä? (Mein Programm läuft mich ShowMainForm := false;)
Ich meine nicht WM_ENDSESSION oder WM_QUERYENDSESSION, denn diese werden nur beim Herunterfahren/Abmelden verschickt. Doch was, wenn der Benutzer das Proggi gewaltsam abschießt, ich aber vorher noch dringend Daten speichern muss?

Dax 14. Nov 2004 14:20

Re: Code ausführen, bevor Prozess beendet wird
 
Wie du gesagt hast, wird das Programm "abgeschossen". Das heisst: Es wird einfach aus dem Speicher entladen, soweit möglich. Damit nimmt Windows deinem Programm jegliche Möglichkeit zu reagieren.

Elite 14. Nov 2004 14:23

Re: Code ausführen, bevor Prozess beendet wird
 
Ich hatte darauf spekuliert, dass Windows dem Prozess vielleicht eine Art "last Chance" anbietet, indem es eine Message sendet und noch ne Sekunde wartet, bis es den Prozess beendet. So etwas gibt es also nicht?

alcaeus 14. Nov 2004 14:23

Re: Code ausführen, bevor Prozess beendet wird
 
Hi Elite,

Zitat:

Zitat von Elite
Doch was, wenn der Benutzer das Proggi gewaltsam abschießt, ich aber vorher noch dringend Daten speichern muss?

wenn der Benutzer das Programm abschießt, dann kannst du davon ausgehen, dass er zu 99% nicht will dass das Programm noch irgendwas macht. Deshalb gibts auch keine Messages. Du kannst höchstens in regelmäßigen Abständen speichern (ca. jede Minute 1 Mal), dann ist die älteste Sicherung höchstens eine Minute alt.

Greetz
alcaeus

Brüggendiek 14. Nov 2004 21:34

Re: Code ausführen, bevor Prozess beendet wird
 
Hallo!

Beim Abschießen eines Tasks per Task-Manager wird zuerst eine WM_CLOSE-Nachricht an das Programm gesendet.
Das Programm reagiert (wenn es noch reagiert!) darauf mit der Abarbeitung des Program-Ende-Codes. Das ist derselbe, der auch beim Schließen des Programms über Menü oder Schließkreuz abgearbeitet wird.

Reagiert das Programmm darauf nicht, wird es "hart" beendet, d.h. aus dem Speicher geworfen.

Meine Programme fragen in der Regel nach, ob sie wirklich beendet werden sollen. Die Frage kommt auch beim Beenden per Task-Manager. Die im "OnCloseQuery" eingetragene Routine wird also noch abgearbeitet.

Ein Problem gibt es nur, wenn das Programm (Haupt-Thread) "hängt" - dann geht nichts mehr. Außerdem sollte das schnell gehen, sonst kommt die Frage "Reagiert nicht" und damit kann man wirklich alles abwürgen.

Gruß

Dietmar Brüggendiek

Mystic 14. Nov 2004 22:00

Re: Code ausführen, bevor Prozess beendet wird
 
Zitat:

Zitat von Brüggendiek
Beim Abschießen eines Tasks per Task-Manager wird zuerst eine WM_CLOSE-Nachricht an das Programm gesendet.

Nur wenn der Task mit "Task beenden" auf dem "Anwendungen"-Tab beendet wird. Wird "Prozess beenden" von dem "Prozesse"-Tab benutzt, wird das Programm sofort gekillt.

Elite 15. Nov 2004 16:42

Re: Code ausführen, bevor Prozess beendet wird
 
Zitat:

Zitat von Mystic
Nur wenn der Task mit "Task beenden" auf dem "Anwendungen"-Tab beendet wird. Wird "Prozess beenden" von dem "Prozesse"-Tab benutzt, wird das Programm sofort gekillt.

Ja, und genau in diesem Fall möchte ich noch Code ausführen. Naja gut, ich akzeptiere, dass es nicht geht :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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