NT Dienst in Delphi

Hallo,

ich habe ein Programm, welches ich als
NT-Dienst starten möchte. Nun habe ich
per Altavista.com ein EINZIGES Beispiel
dazu gefunden. Dieses scheint jedoch
überhaupt nicht zu funktionieren.
Bei Versuch, den Dienst anzumelden, kommt
der Fehler „997“ (Ein überlappender E/A-Vorgang wird bearbeitet.)

Wo finde ich Dokumentationen oder sogar Beispiele zur Programmierung von Diensten unter Delphi ?

Vielen vielen Dank schon ein mal!

Bis dann, dann Sebastian Lorenz

Weis nicht, ob’s das in allen Delphi-Editionen gibt, doch in Delphi 5 Enterprise gibt’s unter File|New ein Template Namens „NT Service Application“.

Dann kannst so von TServiceApplication (anstatt TApplication) ausgehend (fast) ganz normal und einfach mit dem Object Inspector und dem Code-Editor einen Service erstellen. Die Ereignisse die du implementieren kannst, bzw. solltest sind ziemlich simpel, z.B. OnStart, OnStop, OnExecute. Zu jedem dieser Properties und Events gibt’s viele Informationen in der Hilfe. Nur die Units Forms und Dialogs dürfen nicht verwendet werden, weil diese inkompatiblen Code beinhalten und den Service aufhängen würden. Auch in Sachen Datenbank-Anbindung gibt’s einiges zu beachten, falls du das willst.

Hallo,

vielen Dank für die Antwort.
Unter File|New gibt es bei mir leider keinen NTService. Ich habe aber durch Zufall meine Art Skelet gefunden, welches ich nutzen kann…
Die Unit Dialogs läßt sich übrigens dann benutzen, wenn man bei der Einrichtung „Interaktive Desktop-Beziehung“ erlaubt.

Ein Problem habe ich noch. Das Gerüst hier läuft in einer Schleife, die auf STOPPED (angehalten) wartet und nach jedem Schleifendurchlauf 1 Sekunde Pause macht.
SLEEP(1000);
Wenn mein Dienst aber nun läuft, so funktioniert der Install Shield nicht mehr. Sobald ich meinen Dienst beende, läuft dieser sofort an.

Mein Testen ergab, dass es am Sleep-Befehl hängt!!!

Ich möchte nun ein TTimer im Quelltext setzen, weiß aber nicht, wie dem Ereigniss eine Prozedur zuweisen soll.

So sollte es aussehen:
Timer1.ontimer:=MeinProc;
Jedoch bekomme ich Fehlermeldung über inkopatibilität. Wie muß ich die Prozedur deklarieren und wie muß der Syntax dabei aussehen ?

Vielen vielen Dank schon ein mal…

hm…ich kenne ja dieses ‚Gerüst‘ nicht, aber wie auch im original Borland-Template wird es da ja sicher auch eine Ausführungs-Methode geben, in der der eigentliche Service als Loop implementiert wird. Im Original heisst diese Proc OnExecute.
In Verbindung mit einem Timer würdest du denn Timer ganz normal implementieren, also im OnTimer-Event den Service-Code schreiben, dann im OnStart den Timer einschalten und im OnStop/OnPause wieder ausschalten. Im OnExecute käme dann gar nix. Die Service-Proc wird also umgeleitet auf den Timer. So könnte es auch bei deinem Server aussehen.