NT-Dienst programmieren

Ein NT-Dienst hat einen entscheidenden Vorteil gegenüber einem im Hintergrund laufenden Programm: Der Dienst verrichtet auch seine Arbeit, wenn kein Benutzer angemeldet ist!

  • Erstellung:
    • DATEI->NEU->SERVICEANWENDUNG
    • Im Fenster oben links ist jetzt SERVICE1 und darunter DEPENDENCIES zu lesen
    • SERVICE1 markieren und im Objektinspektor folgendes editieren:
      • DISPLAYNAME = TestDienst (Name der im Dienstmanager angezeigt wird)
      • NAME = TestDienst (Name des Dienstes, der intern verwendet wird)
      • SERVICESTARTNAME = (muss leer bleiben, Benutzerkonto, welches als Dienststarter fungiert. Wenn leer, dann Systemkonto)
    • Weitere Parameter (nicht unbedingt notwendig):
      • ALLOWPAUSE: Dienst kann pausieren
      • ALLOWSTOP: Dienst kann gestoppt werden
      • DEPENDENCIES: Stringeinträge die beschreiben, daß der Dienst erst gestartet werden darf, wenn andere Dienste gestartet wurden
      • ERRORSEVERITY: wie reagiert der Dienstestarter auf Startfehler
      • LOADGROUP: wird zusammen mit DEPENDENCIES verwendet, teilt Windows die Gruppenzugehörigkeit mit
      • SERVICESTARTNAME: Dienststarter (z.B. Adminlogin) eingeben
      • PASSWORD: Passwort von SERVICESTARTNAME
      • SERVICETYPE: für WindowsNT-Dienste STWIN32
      • STARTTYPE: Startmodus (manuell, Systemstart, etc.)
      • TAG: egal
      • TAGID: egal
      • WAITHINT: Zeit in Millisekunden, bis der Dienst auf eine Anforderung reagiert
  • Beispiel: Dienst öffnet alle 10 Sekunden eine Textdatei und schreibt die aktuelle Zeit hinein
    1. TTimer in die “Dienstform” mit INTERVALL = 10000
    2. #include in die CPP einfügen
    3. In das OnTimer-Ereignis:
    4. FILE *O;
      O=fopen("C:tbeispieldienst.txt","at");
      
      if (O)
      {
          fputs(AnsiString(Now()).c_str(), O);
          fclose (O);
      }
      
    5. Dienst-Programm über das Menü PROJEKT->XXXX ERZEUGEN erstellen
  • Installation:
    • Verknüpfung auf die Dienste-EXE mit /install hinter dem *.exe erstellen. Beim Start wird dann der Dienst automatisch eingerichtet. Zusätzlich kann noch /silent dahinter, dies unterdrückt die Messagebox nach erfolgreicher Serviceinstallation.
  • Deinstallation:
    • Dienst beenden und Verknüpfung mit /uninstall starten.