Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dienst lässt Windows nicht beenden (https://www.delphipraxis.net/60091-dienst-laesst-windows-nicht-beenden.html)

Dark Crow 3. Jan 2006 07:58


Dienst lässt Windows nicht beenden
 
Hallo DP-Gemeinde,

ich hab nen Problem bei dem ich zur Zeit echt nicht weiterkomm :wall:

Habe nen Dienst geschrieben, welcher das ntBackup-Programm steuert (Zeitgesteuert auslöst, Backuplog als Mail verschickt, usw). Das funktioniert auch alles.

Mein Problem ist jetzt, dass ich, auch wenn es jetzt wieder mekker geben wird, "Datenaustausch zwischen Dienst und Desktop" aktiviert hab, da ein kleines Tray-Icon angezeigt wird, welches den momentanen Status anzeigt.

Wenn ich nun versuche Windows herunterzufahren, funktioniert dies so lange nicht, bis ich den Dienst manuell beende. Sobald ich den Haken bei "Datenaustausch zwischen ..." rausnehme, funktioniert es einwandfrei.

OS: Windows XP
Delphi: 6 Pro

Für den Dienst hab ich den Delphi "Assistent" benutzt.

grüße Markus

Vjay 3. Jan 2006 13:27

Re: Dienst lässt Windows nicht beenden
 
Ich vermute dass es sich dabei um das typische WM_QUERYENDSESSION - Problem handelt. Die Suche sollte helfen.

Du solltest dir dennoch Gedanken machen, wie du das Tray-Icon anders angezeigt bekommst, sonst wirst du deine Backups evtl. früher brauchen als dir lieb ist ;)

Dark Crow 3. Jan 2006 14:30

Re: Dienst lässt Windows nicht beenden
 
Zuerst mal danke für deine Hilfe ... ich hab das Problem gelöst ... hab das Tray in ne andere Anwendung verfrachtet, die mit dem Service per Sockets kommuniziert ...

Aber mich würde interessieren, was du mit "WM_QUERYENDSESSION - Problem" meinst :gruebel:

Bei meinem "Versuch" WM_QUERYENDSESSION mittels

Delphi-Quellcode:
private
procedure WMQueryEndSession (var M: TWMQueryEndSession); message
  WM_QUERYENDSESSION;
Delphi-Quellcode:
procedure TNTBackupToolService.WMQueryEndSession (var M: TWMQueryEndSession);
begin
inherited;
 // Code ...
end;
das Event "mitzubekommen" ist nichts dabei rausgekommen ... gibt es da etwas Spezielles zu beachten bei einem Service?



Ich glaub, ich werd mich hier öfters blicken lassen :dp:

grüße
Markus

Olli 9. Jan 2006 21:53

Re: Dienst lässt Windows nicht beenden
 
Er meint das:
Zitat:

The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls the ExitWindows function. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.

After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.

A window receives this message through its WindowProc function.
Siehe MSDN-Library durchsuchenWM_QUERYENDSESSION


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.

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