Entwickler-Ecke
Windows API - Anwendung im Service integrieren
Postman - Do 25.03.10 11:33
Titel: Anwendung im Service integrieren
Hallo,
ich würde gerne wissen ob es irgendwie möglich ist, eine andere Anwendung in einem Windows Dienst zu integrieren. Um das Ganze genauer zu erklären: Ich habe ein Perl Skript was in eine Exe gepackt ist. außerdem habe ich einen Windows Dienst der die Perl Anwendung überwacht, also schaut ob er noch läuft, ihn für Update zwecke jede Stunde neustartet, usw..
Das Problem ist, das Perl Skript schmeißt in unregelmäßigen Abständen einen Fehler, der die Exe zum Absturz bringt. Das wäre eigentlich nicht weiter schlimm, da der Service das erkennt und die Exe einfach neustartet, durch den Fehler poppt mir allerdings das bekannte "Fehlerbericht senden" Fenster auf, was im Kontext eines Systemdienstes auf keinen Fall passieren darf (ein Dienst darf keine User Interaktion erfordern).
Die Frage ist nun, ist es möglich, die Perl Anwendung irgendwie im Dienst zu integrieren, beispielsweise als Child Process o.Ä.? Wenn die Anwendung im Kontext des Dienstes läuft ist sie nicht mehr in der Lage eine grafische Fehlermeldung zu erzeugen, was mir sehr gelegen käme.
Und ja ich weiß, es wäre angebracht dem eigentlichen Fehler auf den Grund zu gehen. Da es allerdings kein Fehler im Skript sondern in der Runtime der Perl Engine selbst ist, kann ich daran leider erstmal nichts ändern. Außerdem könnte ja irgendwann mal ein anderer Fehler auftreten und würde ebenfalls zu einer grafischen Fehlermeldung führen, eine Integration im Dienst wäre also in jedem Fall wünschenswert.
Ich wäre für jeden Ansatz dankbar!
Gruß Posti
BenBE - Do 25.03.10 11:54
Wie wäre es, den Fehler in der Perl-Anwendung zu korrigieren?
Und bzgl. Fehler in der PErl Runtime: Melde einen Bugreport an die Entwickler (sofern noch nicht getan), debugge die Ursache und schlage einen Patch vor. Geht dann oftmals recht zügig. OpenSource ist nicht nur nehmen, sondern auch geben!
Postman - Do 25.03.10 12:00
Wie bereits erwähnt, der Fehler liegt nicht im Perl Skript sondern in der Runtime. Auf die Runtime hab ich nunmal keinen Einfluss. Es wäre denkbar den auslösenden Funktionsaufruf des Skripts zu identifizieren, der Perl Debugger selbst ist dazu allerdings nicht in der Lage da da Ganze als Daemon läuft und er damit offenbar nicht klarkommt.
Außerdem könnten wie gesagt auch theoretisch mal andere Fehler auftreten, die dann ebenfalls zu einer grafischen Fehlerausgabe führen. Ein generelles Unterdrücken der Fehlermeldung durch die Implementation in einem Dienst wäre also sehr viel sicherer.
BenBE - Do 25.03.10 12:03
Hol Dir mal einen aktuellen Developement-Snapshot von Perl mit Debugsymbolen und klemm dich da mit OllyDbg drauf.
Und klar: Es können anderFehler auftauchen. Und ich hab auch schon zahlreiche Bugreports für Fremdsoftware geschrieben (bzw. schreiben lassen). Wenn jeder ständig nur die Fehlermeldungen unterdrückt, werden die Fehler nicht behoben.
Postman - Do 25.03.10 12:48
Die Runtime ist leider kein OpenSource.
Ich nutze ActivePerl da ich das zugehörige PDK benötige um die Exe packen zu lassen.
Bugreport ist schon seit einigen Tagen raus, da es aber offenbar ein recht exotischer Fehler ist könnte der Fix noch etwas dauern.
Also danke für den Tipp allerdings ist das nichts Neues und löst mein eigentliches Problem nicht ;)
Steve1024 - Fr 23.04.10 20:22
Also soweit ich weiss sollte das generell mit CreateProcess (MSDN) möglich sein. Oder seh ich da was falsch?
BenBE - Sa 24.04.10 15:26
Ja und nein ;-)
Ja: Damit geht das.
Nein, weil man aus Sicherheitsgründen den Prozess nicht mit CreateProcess, sondern CreateProcessEx und einem Security-Token eines unprivilegierteren Nutzers als LocalSystem starten sollte.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!