GetMessage() in Diensten / Thread ?
-
Hallo,
wie funktioniert Getmessage in Diensten ?
Ich habe mal ein GetMessage(&msg, GetDesktopWindow(), 0,100) in einem
Thread aufgerufen mit der guten Hoffnung, einen WM_ONQUERYENDSESSION (Shutdown)
mitzubekommen. Leider kommt da gar keine Meldung an.
Ich setze den Thread in einem Dienst ein ... ein Problem ?Grüße
thenoname
-
So gar nicht.
Das beenden des Systems bekommt Dein Dienst über den SERVICE_CONTROL_SHUTDOWN Deines Service Handlers mitgeteilt. Einen Shutdown kannst Du im Service nicht verhindern.
-
Hi,
danke für die Antwort,
was ich nicht verstehe, ist das die PostMessageLoop() Funktion nicht aufgerufen wird.
Ebenso frage ich mich, ob ich beim SERVICE_CONTROL_SHUTDOWN noch Zeit habe, einen Datensatz ein ein anderes Gerät zu schicken (zum Ausschalten).
Ausserdem weiss ich nicht, ob zuerst alle Dienste beendet werden oder ob dort sogar schon die Treiber weggezogen werden ??
Das was ich im iNet gefinden habe:
"You only get about 2 seconds to stop processing" Wahrheit oder Vermutung ??Vielleicht kannst du mir noch ein wenig mehr (links) zum implementieren
von SERVICE_CONTROL_SHUTDOWN geben ?Grüße
thenoname
-
So, ich hab jetzt den ATL Handler überschrieben und auf SERVICE_CONTROL_SHUTDOWN
und SERVICE_CONTROL_STOP getriggert. Da kommt gar nix an.
Scheint so, als würden alle Dienste abgewürgt ??
Beim Beenden über den Service Manager hingegen kommts an.Gruß
-
Dann hast Du dem SCM nicht gesagt, dass Du auch die Infos darüber haben möchtest, siehe: SERVICE_ACCEPT_STOP, SERVICE_ACCEPT_SHUTDOWN!
-
Wenn ich das richtig sehe, mach man das in der ServiceMain Routine ?
Oder reicht ein Registry Eintrag ? Wenn ja, wie sieht der aus ?
-
Nein! Das geschieht durch SetServiceStatus. Der Member dwControlsAccepted muss entsprechend gesetzt werden!
-
Jo, in der ServiceMain.
Mit ATL gings jetzt sogar noch schneller
Einfach die kleine grüne Raute in der Klassenansicht und den neuen
Status Accept eintippeln. (in der überschriebenen Servicemain)m_status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWNJetzt klappt auch wieder die PostMessage ...
MAN DANKT VIELE MALE !!!