![]() |
Frage zu Systemdienst
Hallo,
ich arbeite gerade an einem Systemdienst und möchte dass dieser Systemdienst eine bestimmte Aufgabe erledigt bevor sich ein (bestimmter) User einloggt. Jemand eine Idee wie das zu machen ist ? KUBA |
Re: Frage zu Systemdienst
Stichwort
![]() |
Re: Frage zu Systemdienst
Zitat:
KUBA |
Re: Frage zu Systemdienst
Verwendet dieser Service RegisterServiceCtrlHandler oder RegisterServiceCtrlHandlerEx? Bei letzterem werden dir die Benachrichtigungen nämlich gesendet, ohne dass du die Funktion aufrufen musst.
|
Re: Frage zu Systemdienst
Zitat:
Ja, man sollte wissen mit was man da überhaupt arbeitet, das ist mir in letzter Zeit häufiger aufgefallen ... :idea: kuba |
Re: Frage zu Systemdienst
der Service beinhaltet die Funktion leider nicht, kann man evtl. über diese Routine herausfinden ob ein User angemeldet ist ?
![]() Die Routine verwende ich schon, wenn ich jedoch folgende Abfrage verwende komme ich nicht zum richtigen Ergebnis :
Delphi-Quellcode:
Kann es sein dass vor der Benutzeranmeldung schon ein Benutzer angemeldet ist ?
err := GetLoggedOnUserNameEx(3, Username);
if err = 0 then ... oder müsste es heissen:
Delphi-Quellcode:
Probiere ich gleich aus ...
err := GetLoggedOnUserNameEx(0, Username);
if err <> 0 then ... KUBA |
Re: Frage zu Systemdienst
Was heißt "beinhaltet die Funktion nicht"? Entweder RegisterServiceCtrlHandler oder RegisterServiceCtrlHandlerEx muss er benutzen. Jeder Dienst muss das. Und die Abfrage hilft nicht viel, wenn du eine Benachrichtigung erhalten willst.
|
Re: Frage zu Systemdienst
Zitat:
Delphi-Quellcode:
Wie benutzt man das um eine Benachrichtigung zu erhalten ?
PROCEDURE serviceproc(dwargc:integer;VAR lpszargv:pchar); STDCALL;
BEGIN sshstatushandle:=registerservicectrlhandler(pchar(servicename), @servicehandler); IF (sshstatushandle<>0) THEN BEGIN zeromemory(@ssstatus, sizeof(ssstatus)); ssstatus.dwservicetype:=SERVICE_WIN32_OWN_PROCESS; ssstatus.dwcurrentstate:=SERVICE_START_PENDING; ssstatus.dwcontrolsaccepted:=SERVICE_ACCEPT_STOP OR SERVICE_ACCEPT_PAUSE_CONTINUE; ssstatus.dwwaithint:=1000; setservicestatus(sshstatushandle, ssstatus); stopped:=false; paused:=false; ssstatus.dwcurrentstate:=SERVICE_RUNNING; setservicestatus(sshstatushandle, ssstatus); SERVICE_MAIN; ssstatus.dwcurrentstate:=SERVICE_STOPPED; setservicestatus(sshstatushandle, ssstatus); END; END; KUBA |
Re: Frage zu Systemdienst
Mit RegisterServiceCtrlHandler geht das leider nicht. Du musst entweder auf RegisterServiceCtrlHandlerEx umstellen oder Fenster benutzen.
|
Re: Frage zu Systemdienst
Zitat:
Ich habe eine Idee :coder2: Wenn der Service gestartet wird kann ich eine Variable setzten, dann weiss ich schon mal dass sich noch niemand zuvor eingeloggt hat und führe meine Funktion beim Systemstart aus. Der "bestimmte Benutzer" erhält eine Systemkonfiguration, aber nicht jedes mal beim Systemstart sondern immer nur dann wenn sich die Konfiguration geändert hat. Das kann ich nutzen um meinem Service mitzuteilen dass meine Funktion erneut ausgeführt werden muss. kuba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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