Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TService: OnShutdown feuert nicht (https://www.delphipraxis.net/205892-tservice-onshutdown-feuert-nicht.html)

bcvs 28. Okt 2020 07:50

TService: OnShutdown feuert nicht
 
Hallo zusammen,

ich will in einem Dienst auf das Herunterfahren von Windows reagieren. Dazu verwende ich den Event OnShutdown. Der feuert auch bei "Neu starten" von Windows, allerdings nicht beim "Herunterfahren" und anschließendem manuellen Neustart.

Im zweiten Fall wird auch beim Neustart das OnStart nicht durchlaufen.

Was ist da los?
Oder gibt es eine andere Methode, auf das Herunterfahren des Computers zu reagieren und vorher noch eine kurze Aktion auszuführen?

Dalai 28. Okt 2020 09:28

AW: TService: OnShutdown feuert nicht
 
Feuert das Event denn, wenn du beim Herunterfahren des Systems die Shift-Taste gedrückt hältst?

Wenn ja, wundert mich das nicht, dass da kein Shutdown-Signal gefeuert wird, da Windows seit Win8 standardmäßig nicht mehr heruntergefahren wird sondern nur die Nutzersitzung beendet und anschließend das System in den Ruhezustand versetzt wird. Dieses "Feature" wird von Microsoft als Schnellstart (Fast Boot) bezeichnet, und wenn man das nicht braucht/möchte, kann man es deaktivieren.

Grüße
Dalai

Uwe Raabe 28. Okt 2020 09:40

AW: TService: OnShutdown feuert nicht
 
Das ist auch der Grund, warum man die Developer-Instanz des Interbase Servers in so einem Fall nach 24 Stunden trotzdem einmal neu starten muss, obwohl das System ja gerade "hochgefahren" wurde.

bcvs 28. Okt 2020 10:20

AW: TService: OnShutdown feuert nicht
 
Zitat:

Zitat von Dalai (Beitrag 1476240)
Feuert das Event denn, wenn du beim Herunterfahren des Systems die Shift-Taste gedrückt hältst?

Ja, dann feuert es.

Das heißt aber, dass das OnShutdown für meine Zwecke ungeeignet ist.
Gibts es da noch andere Möglichkeiten, das Herunterfahren oder Beenden der Nutzersitzung zu erkennen?

Uwe Raabe 28. Okt 2020 10:32

AW: TService: OnShutdown feuert nicht
 
Hast du mal OnPause und OnContinue versucht?

bcvs 28. Okt 2020 13:26

AW: TService: OnShutdown feuert nicht
 
Ja, das reagiert aber nur auf anhalten / fortsetzen in der Dienstverwaltung.

bcvs 29. Okt 2020 12:03

AW: TService: OnShutdown feuert nicht
 
Ich habe es jetzt anders gelöst: Mein Tool läuft nicht mehr als Dienst, sondern als Programm mit Icon im Infobereich der Taskleiste.
Da reagiere ich auf WM_ENDSESSION.

himitsu 29. Okt 2020 18:01

AW: TService: OnShutdown feuert nicht
 
Bekommt der Dienst kein WM_ENDSESSION?

bcvs 30. Okt 2020 08:31

AW: TService: OnShutdown feuert nicht
 
Nein, hat ja kein Fenster.

himitsu 30. Okt 2020 09:50

AW: TService: OnShutdown feuert nicht
 
Zitat:

Zitat von bcvs (Beitrag 1476403)
Nein, hat ja kein Fenster.

Braucht er auch nicht, naja, nicht direkt,
aber nein, dein Dienst hat ein "Fenster", siehe Application. :zwinker:

TService nutzt intern die VCL, für die Messagebehandlung.
Forms.Application.Handle (HWND) ist das Basis-MessageWindow der VCL.



SvcMgr.Application (TServiceApplication) die hauptklasse des Delphi-Services,
aber intern wird auf Forms.Application (TApplication) zugrgriffen ... das kannst du auch, indem du die Unit Forms einbindest.

Bzw. du kannst auch Delphi-Referenz durchsuchenTApplicationEvents verwenden. Ist eh besser als direkt auf die Events von Forms.Application zuzugreifen.


Message-Only Window: Das sind unsichtbare "Fenster" ohne Parent ... SystemMessages werden von Windows an alle TopLevel-Windows gesendet.

Du kannst auch selbst ein Message-Only Window erstellen. (PS: jeder VCL-TTimer hat intern auch sein eigenes Fenster)
https://docs.microsoft.com/en-us/win...e-only-windows


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz