Autor Beitrag
Postman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Windows 7
Delphi 2010
BeitragVerfasst: Do 25.03.10 11:33 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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!

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Postman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Windows 7
Delphi 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Postman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Windows 7
Delphi 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows 2K, XP, 7 & Server 2003 - 2008; Linux (Ubuntu, Fedora)
D7, D05, D06, D09, DXE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.