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
- TTimer in die “Dienstform” mit INTERVALL = 10000
- #include
in die CPP einfügen - In das OnTimer-Ereignis:
- 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.
FILE *O; O=fopen("C:tbeispieldienst.txt","at"); if (O) { fputs(AnsiString(Now()).c_str(), O); fclose (O); }