Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Lazarus --> TDaemon --> Startevents werden nicht ausgelöst


jaenicke - Mi 15.09.10 09:57
Titel: Lazarus --> TDaemon --> Startevents werden nicht ausgelöst
Hallo,

ich arbeite mit Lazarus unter Windows 7 64-Bit. Ich habe versucht einen 64-Bit Service mit TDaemon zu schreiben.

Dafür habe ich das Package lazdaemon installiert und dann eine neue "Daemon (Service) application" erstellt. Dann habe ich im Mapper den entsprechenden Daemon hinzugefügt, dieser steht auch auf Enabled. Ich kann den Service auch problemlos installieren.

Wenn ich dann aber versuche diesen zu starten, passiert das zwar laut Diensteverwaltung und ich kann den auch stoppen usw., aber es wird kein Event des Daemon ausgelöst. Testweise habe ich dort eine Logdatei geschrieben, so dass ich weiß, dass die Register-Prozeduren für den Mapper und den Daemon ausgeführt werden, leider aber nicht mehr.

Weder OnStart noch OnStop noch OnExecute werden ausgelöst.

Was muss ich noch machen? Habe ich etwas übersehen?

(Mit echtem Debuggen wird es schwierig, da es einerseits Lazarus und andererseits ein Dienst ist... Das Verbinden mit einem Prozess soll zwar via gdb irgendwie gehen, aber ich habe keine Ahnung ob unter Windows und wenn ja wie.)

Den Daemon anhängen wird wohl nicht viel bringen, da ich ja nur das gemacht habe was ich geschrieben habe.

// EDIT:
Crosspost:
http://www.delphipraxis.net/154557-lazarus-tdaemon-startevents-werden-nicht-ausgeloest.html

in der Hoffnung auf Erleuchtung,
schönen Gruß,
Sebastian


elundril - Mi 15.09.10 12:31

Hier [http://wiki.lazarus.freepascal.org/Daemons_and_Services] steht das es bei Lazdaemon ein Beispielquellcode dabei ist. Hast du mal getestet ob der funktioniert, bzw wenn er funktioniert, wo die Unterschiede zwiscen deinem und dem Beispielquellcode sind?

Vielleicht hilft dir auch dieses PDF [http://www.linuxprogramlama.com/downloads/lazarus/daemons.pdf] weiter.

lg elundril


jaenicke - Mi 15.09.10 13:23

Das Beispiel funktioniert leider auch nicht. Die Events werden auch da nicht ausgelöst.

Und so wie in der PDF-Datei habe ich das auch gemacht.

Das ist genau der Grund weshalb ich mir nicht sicher bin was da schieflaufen kann. Und da Lazarus sich nicht zu laufenden Prozessen (in diesem Fall der Dienst) verbinden kann und gdb das unter 64-Bit offenbar auch nicht kann (jedenfalls habe ich das gelesen und wüsste aber ohnehin nicht wie), kann ich auch nicht nachschauen was da eigentlich passiert.

Das Loggen wie dem Eventlogger klappt auch nicht wirklich, entweder kommt das nicht so weit oder das kommt nicht an. Ich weiß wirklich nicht was ich da machen kann.

Ich würde mich über ein laufendes Minibeispiel, das einfach nur in OnStart oder OnExecute zeigt, dass der Dienst gestartet wurde, sehr freuen, wenn das jemand hinbekommt. ;-) (Aber da auch das vorhandene Beispiel offenbar nicht funktioniert, bin ich nicht sicher, ob das an 64-Bit liegt und es da nicht geht...)


jaenicke - Do 16.09.10 08:29

Falls mal jemand das selbe Problem hat: Nach dem Hinweis auf den Bugtracker in der DP habe ich die Lösung dort gefunden:
Einfach die Unit lazdaemonapp aus (Lazarus)\components\daemon in das Projekt aufnehmen und es klappt...
Darauf soll mal jemand kommen...

Nebenbei ist das offenbar auch der Grund weshalb das Beispiel gar nicht funktioniert (habs nicht getestet, aber da fehlt die Unit auch).

Jedenfalls klappt jetzt alles (auch unter 64-Bit).