Service soll auf eine Benutzeranmeldung reagieren



  • Hallo,
    ich habe eine Service (mit Builder Xe7) erstellt. Dieser wird bei Rechnerstart automatisch gestartet.
    Sobald sich ein Benutzer nun anmeldet am System, soll mein Service z.B. eine Meldung auf dem Bildschirm erstellen. Wie kann mein Service diese Benutzeranmeldung erkennen u. darauf reagieren?
    Danke!


  • Mod

    Services können keine Meldungen auf Desktops erzeugen.

    Starte auf dem Desktop über Run/Runonce/Atostart ein extra Programm das mit dem Service kommuniziert.



  • Danke,
    aber ein Service kann so etwas wie ein Logon Event erkennen und dann als Reaktion darauf z.B. eine ZeigeMeldung.exe starten.
    Wie kann der Service dieses Logon Event erkennen?



  • Es gibt 1000 Arten "Logon Events".
    Welche davon interessieren dich?

    Davon abgesehen... eine Möglichkeit wäre das Event-Log zu überwachen. Das haben wir mal für nen Serversystem gemacht, wo per Gesetz interaktive Logons protokolliert werden mussten (wer, wann, warum).
    (Den "warum" Teil konnte das Service natürlich nicht machen, dafür mussten wir dann sowieso mitschreiben, nur war auch gefordert dass die "wer/wann" Daten automatisch erfasst werden und live über ein Web-Interface abfragbar sind.)



  • Auf jeden Fall muss dann wohl eine zyklische Abfrage per Timer im Service stattfinden, dann wird das doch nicht so schwierig.



  • Uff.
    Also wir haben es so gemacht. Ich kann aber nicht sagen ob es nicht noch andere Möglichkeiten gibt.

    Das nette an der Lösung über's Event-Log ist halt dass man auch Logon Events mitbekommt die stattgefunden haben während das Service gerade nicht gelaufen ist.
    Vorausgesetzt natürlich sie werden geloggt (soweit ich weiss kann man das per Group-Policy abdrehen). Und vorausgesetzt das Event-Log wurde nicht gelöscht/modifiziert (das geht auf jeden Fall, jeder Admin kann das Log löschen).

    Und wenn das System entsprechend konfiguriert ist (=diesen Typ von Logon Events loggt), bekommt man sogar mit wenn sich jemand nicht-interaktiv anmeldet. z.B. einfach jemand der ein File von einem Server runterkopiert.

    ----

    Wenn du es so implementieren willst, also per Polling, würde ich empfehlen dass dein Service sich die ID des zuletzt gelesenen Event-Log Eintrags merkt. Und dann nur Events > dieser ID liest. Dann ist das Polling halbwegs billig.



  • Danke!


  • Mod

    Es kann interaktiv ZeigeMeldung nicht starten. Für welchen, denn der vielen angemeldeten Benutzer?
    Aber es kann dem schlafenden Prozess eine Nachricht geben...



  • es gibt da so einen registry Eintrag, oder besser, meist gibt es ihn nicht und man muss ihn selber anlegen:
    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

    2 neue string values darin erstellen:
    1. LegalNoticeCaption -> "dein Meldungs Titel"
    2. LegalNoticeText -> "deine Meldung"

    nun wird bei jedem Start eine Messagebox mit entsprechendem Titel und Inhalt ausgegeben.

    in Pascal/Delphi sähe das z.b so aus:

    program startMsg;  
     {$APPTYPE CONSOLE}  
     uses  
      SysUtils, Registry, Windows;  
     const  
      KEY_msg = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon';  
     var  
      Reg: TRegistry;  
     begin  
      Reg := TRegistry.Create;  
      try  
       Reg.RootKey := HKEY_LOCAL_MACHINE;  
       if Reg.OpenKey(KEY_msg, False) then  
       begin  
        Reg.WriteString('LegalNoticeCaption','"Hier steht der Titel"');  
        Reg.WriteString('LegalNoticeText','"Hier ist deine Meldung"');  
        Reg.CloseKey;  
       end;  
      finally  
       Reg.Free;  
      end;  
     end.
    

    sollte kein Problem sein das zu porten...
    mfg


  • Mod

    @jodoissneaw: Und in wie weit hilft das zu der Frage?


Log in to reply