ich bastle gerade an einem Systemservice fuer Windows und verwende dazu die TDaemon-Klasse ... aber selbst ein Minimalbeispiel (siehe Attachment) stuerzt immer ab, wenn es aufgerufen wird.
DaemonTest.exe -i und DaemonTest.exe -u zum Installieren/Deinstallieren des Services funktionieren
"Starten" in "Dienste" endet mit der Warnung "Der Dienst ... auf "Lokaler Computer" konnte nicht gestartet werden. Fehler 3: Das System kann den angegebenen Pfad nicht finden". (Der Pfad enthaelt keine Leer- oder Sonderzeichen.)
Starten mit DaemonTest.exe -r von der Command line fuehrt nach einigen Sekunden zu "An unhandled Exception occured at ... EAccessViolation".
Was mache ich hier falsch? Mir ist schon klar, dass in dem Code kein einziger Eventhandler eingehaengt ist, aber auch das sollte doch mit Assigned() ueberprueft werden ... wenn es denn ueberhaupt was mit dem Problem zu tun hat.
Weiters wollte ich fragen, ob es noch einen einfacheren (?) Ansatz gibt, ein Systemservice zu schreiben ... ein Unix-Daemon macht in diesem speziellen Fall ohnehin keinen Sinn ...
danke fuer den Tip ... ich habe es auch mal mit der 0.9.31 und 2.4.4 ausprobiert, an dem Problem aendert sich leider nichts.
Ich habe auch c:\lazarus\fpc\2.4.2\source\packages\fcl-base\examples\daemon.pp verwendet, hier wird ein Service nicht ueber visuelle Komponenten sondern zu Fuss erzeugt ... gleiches Ergebnis. (Wenn man {$apptype gui} entfernt ... was hat das dort verloren?)
Ich frage mich, wie ich jetzt am besten eingrenzen kann, was diese EAccessViolation bei mir ausloest und bei anderen nicht ...
af0815 hat geschrieben:Sind die Rechte für den Prozess überhaupt vorhanden ?!
Was mir dazu einfällt, ist Security und Firewall.
Was sagt das SystemLOG, SecurityLOG und ev. ein Log des Firewalls.
ich entwickle auf einer virtuellen Maschine ohne Netzwerkanbindung, daher mit einem Admin-Account und ohne Firewall (die fuer das Funktionieren dieses Testbeispiels auch keinen Unterschied machen sollte).
In der Ereignisanzeige/System, Anwendung und Security findet sich leider kein Wort zu diesem Service ...
Eclipticon hat geschrieben:
ich entwickle auf einer virtuellen Maschine ohne Netzwerkanbindung, daher mit einem Admin-Account und ohne Firewall (die fuer das Funktionieren dieses Testbeispiels auch keinen Unterschied machen sollte).
In der Ereignisanzeige/System, Anwendung und Security findet sich leider kein Wort zu diesem Service ...
Der Dienst läuft normalerweise nicht im Securitybereich des Admin. Es läuft im Accountbereich des 'local systems'. Das Service ist nach der Installation im Servicemanager mit dem richtigen Pfad sichtbar ? Ist der Pfad auch für den Account securitymässig erreichbar und ausführbar ? In der VM kannst mal das Service Testweise auf einen Account mit mehr Rechten legen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815 hat geschrieben:Der Dienst läuft normalerweise nicht im Securitybereich des Admin. Es läuft im Accountbereich des 'local systems'. Das Service ist nach der Installation im Servicemanager mit dem richtigen Pfad sichtbar ? Ist der Pfad auch für den Account securitymässig erreichbar und ausführbar ? In der VM kannst mal das Service Testweise auf einen Account mit mehr Rechten legen.
danke fuer den Hinweis.
Ich hab' die Anmeldung des Services auf meinen Account (mit Adminrechten) geaendert - macht keinen Unterschied. Es haette vermutlich auch die Exception nicht erklaert, die ich beim Starten von der Kommandozeile aus mit -r bekomme ...
Und ja, der Pfad ist richtig im Servicemanager eingetragen ... und enthaelt keine Leerzeichen oder dergleichen mehr.
Ob der Pfad nun fuer LOCAL SYSTEM erreichbar ist oder nicht kann ich nicht wirklich testen, da ich keine Kommandozeile/Explorer als dieser User starten kann ... oder?
Ok, mal das ganze in einer 'fast neuen' VM getestet (extra Lazarus dort installiert). Läuft ohne Probleme. Lässt sich installieren, starten. Exakt DEINE Sourcen vom ersten Beitrag. Laz 0.9.30.2RC1, FPC 2.4.4
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Eclipticon hat geschrieben:Oh, danke fuer den Aufwand ... darf ich noch fragen, ob das WinXP oder Win7 war?
Und ich verabschiede mich jetzt, auch eine "saubere" VM einrichten ...
WinXP Pro SP3 engl. (Multilang)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Darf ich noch fragen, ob Du das Beispiel mit Servicemanager > Start oder auf der Kommandozeile mit ...exe -r getestet hast?
Mit einem frischen Win7 bekomme ich im Service Manager auch keine Fehlermeldung mehr (muss allerdings den Prozess erst umbauen, damit er sich irgendwie bemerkbar macht, wenn er wirklich laeuft), aber mit -r gibt's die gleiche EAccessViolation.
Vielleicht ist es aber auch eine Frage irgendwelcher Compilerswitches, die ich habe?!?