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/)
-   -   Delphi Frage zu Systemdienst (https://www.delphipraxis.net/117818-frage-zu-systemdienst.html)

kuba 25. Jul 2008 15:53


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

Apollonius 25. Jul 2008 16:00

Re: Frage zu Systemdienst
 
Stichwort MSDN-Library durchsuchenWTSRegisterSessionNotification. Verwendest du einen handgestrickten Service oder die VCL-Variante?

kuba 25. Jul 2008 16:02

Re: Frage zu Systemdienst
 
Zitat:

Zitat von Apollonius
Stichwort MSDN-Library durchsuchenWTSRegisterSessionNotification. Verwendest du einen handgestrickten Service oder die VCL-Variante?

Wie benutzt man das ?? Ich verwende den handgestrickten Service von Assarbad.

KUBA

Apollonius 25. Jul 2008 16:08

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.

kuba 25. Jul 2008 16:36

Re: Frage zu Systemdienst
 
Zitat:

Zitat von Apollonius
Verwendet dieser Service RegisterServiceCtrlHandler oder RegisterServiceCtrlHandlerEx? Bei letzterem werden dir die Benachrichtigungen nämlich gesendet, ohne dass du die Funktion aufrufen musst.

Aha, danke für den Tip, werde gleich mal nachschauen !!

Ja, man sollte wissen mit was man da überhaupt arbeitet, das ist mir in letzter Zeit häufiger aufgefallen ... :idea:

kuba

kuba 25. Jul 2008 17:05

Re: Frage zu Systemdienst
 
der Service beinhaltet die Funktion leider nicht, kann man evtl. über diese Routine herausfinden ob ein User angemeldet ist ?

Angemeldeten Benutzer auslesen

Die Routine verwende ich schon, wenn ich jedoch folgende Abfrage verwende komme ich nicht zum richtigen Ergebnis :

Delphi-Quellcode:
err := GetLoggedOnUserNameEx(3, Username);
  if err = 0 then ...
Kann es sein dass vor der Benutzeranmeldung schon ein Benutzer angemeldet ist ?

oder müsste es heissen:

Delphi-Quellcode:
err := GetLoggedOnUserNameEx(0, Username);
  if err <> 0 then ...
Probiere ich gleich aus ...

KUBA

Apollonius 25. Jul 2008 17:08

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.

kuba 25. Jul 2008 17:32

Re: Frage zu Systemdienst
 
Zitat:

Zitat von Apollonius
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.

Habe ich auch gerade festgestellt und nochmal nachgeschaut, RegisterServiceCtrlHandler ist vorhanden. :oops:

Delphi-Quellcode:
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;
Wie benutzt man das um eine Benachrichtigung zu erhalten ?

KUBA

Apollonius 25. Jul 2008 17:34

Re: Frage zu Systemdienst
 
Mit RegisterServiceCtrlHandler geht das leider nicht. Du musst entweder auf RegisterServiceCtrlHandlerEx umstellen oder Fenster benutzen.

kuba 25. Jul 2008 17:52

Re: Frage zu Systemdienst
 
Zitat:

Zitat von Apollonius
Mit RegisterServiceCtrlHandler geht das leider nicht. Du musst entweder auf RegisterServiceCtrlHandlerEx umstellen oder Fenster benutzen.

Das wird mir zu kompliziert, das Programm ist eigentlich schon fertig ich möchte nur noch dass ein paar Dinge etwas anders funktionieren.

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.
Seite 1 von 2  1 2      

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