![]() |
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? |
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 |
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.
|
AW: TService: OnShutdown feuert nicht
Zitat:
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? |
AW: TService: OnShutdown feuert nicht
Hast du mal OnPause und OnContinue versucht?
|
AW: TService: OnShutdown feuert nicht
Ja, das reagiert aber nur auf anhalten / fortsetzen in der Dienstverwaltung.
|
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. |
AW: TService: OnShutdown feuert nicht
Bekommt der Dienst kein WM_ENDSESSION?
|
AW: TService: OnShutdown feuert nicht
Nein, hat ja kein Fenster.
|
AW: TService: OnShutdown feuert nicht
Zitat:
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 ![]() 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) ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 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