Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi VCL Anwendung aus Windowsdienst starten (https://www.delphipraxis.net/202226-vcl-anwendung-aus-windowsdienst-starten.html)

Neutral General 10. Okt 2019 13:19

VCL Anwendung aus Windowsdienst starten
 
Hallo,

Ich habe einen in Delphi geschriebenen Windowsdienst. Dieser läuft unter dem SYSTEM-Benutzer.
Eine der (Neben-)Aufgaben des Dienstes ist u.a. PDFs zu erzeugen bzw. bereitzustellen.
Zur Erzeugung der PDFs soll/muss FastReport genutzt werden.
Das Problem ist jetzt das FastReport ohne VCL bzw. Window Handles nicht auskommt und meines Wissens haben Window Handles in einem Windowsdienst nichts zu suchen, bzw. führen auch zu Fehlern.
Das bedeutet letztendlich dass ich die PDF im Dienst selbst dummerweise nicht erzeugen kann.

Mein Plan war jetzt eine VCL-Anwendung zu schreiben die vom Dienst gestartet wird und die mit dem Dienst per TCP kommuniziert und für den Dienst die PDFs erstellt.
Der Dienst holt sich dann die von der VCL-Anwendung erstellten PDFs einfach ab.
Das ganze funktioniert ganz gut wenn der Dienst nicht als Dienst sondern als Konsolenanwendung läuft (unter dem aktuell angemeldeten Benutzer).
Als Windowsdienst klappt das Ganze aber irgendwie nicht ganz.

Ist das überhaupt erlaubt, bzw. kann das überhaupt funktionieren ein VCL-Programm von einem SYSTEM-Dienst starten zu lassen?
Das Hilfsprogramm startet, aber nachdem es per TCP den Befehl zum Erstellen der PDF erhält hängt es sich auf.

Ich hoffe die Informationen reichen aus damit jemand vielleicht was dazu sagen kann.
Was ich bräuchte ist ein Hinweis/Erklärung warum das möglicherweise nicht klappt bzw. klappen kann oder/und welche Alternative mir bleibt die PDF zu erstellen.

HolgerX 10. Okt 2019 13:51

AW: VCL Anwendung aus Windowsdienst starten
 
Hmm..

mit ein paar Tricks ist es möglich einen Dienst zu schreiben, welcher auf das Login von Windows reagiert und dann mit dessen User-Anmeldung in dessen Session eine Applikation zu starten.

Gerade mal auf Win10 getestet und funktioniert auch dort noch, hatte vorher nur mit Win7 verwendet.

Bedenke aber, dass sich an Windows über 'Benutzer wechseln' mehrere User gleichzeitig anmelden können und dann eventuell in jeder Session dein VCL-Tool gestartet wird.


Ob Dir das hilft weiß ich nicht, da du ja bereits das Starten deiner VCL-Anwendung ja bereits gemacht hast.

Woher kommen denn die Daten für das PDF?
Läuft die Anwendung (PDF-Erzeugung) auch im Kontext des Users?

TiGü 10. Okt 2019 14:50

AW: VCL Anwendung aus Windowsdienst starten
 
Klingt ein bisschen so, als ob der Teil von FastReport in der User Session laufen muss und das daher in Session 0, wo dein Dienst läuft, nicht funktioniert.

Was ähnliches ist mir neulich beim Einrichten von Jenkins passiert.
Ging ewig nicht, musste dann den Dienst in meinen User-Account laufen lassen (siehe Spalte "Anmelden als" in services.msc).

Hintergrund-Informationen:
https://brianbondy.com/blog/100/unde...s-and-desktops


Probiere doch mal diesen Codeschnipsel aus:
http://thundaxsoftware.blogspot.com/...er-active.html

FBrust 10. Okt 2019 16:29

AW: VCL Anwendung aus Windowsdienst starten
 
Hallo,

ich habe seit Jahren einen Dienst laufen, der mit FastReport PDFs erzeugt. Der Dienst wurde mit Delphi 2010 und FastReport 4 erstellt (die Umstellung auf D10 und FastReport 6 steht noch aus).

Der Dienst hat seinerzeit ein Datenmodul-Formular bekommen, auf dem der frxReport1 und ein frxDBDataset liegen. Ich glaub, der Grund war, dass die Komponente frxReport1 nicht zur Laufzeit erzeugt werden konnte.

In der Main-Unit sind frxClass, frxExportPDF und frxDBSet eingebunden. Der PDFExport wird dann zur Laufzeit erzeugt.


Ich hoffe, das hilft Dir weiter.

Gruß
Frank

Neutral General 10. Okt 2019 16:36

AW: VCL Anwendung aus Windowsdienst starten
 
Wie es aussieht hat es sich aufgelöst... :roll:
Der Dienst (bzw. die Helper.exe) sollte auf Daten auf einem Netzlaufwerk zugreifen, das natürlich für den Systembenutzer nicht gemappt war.
Ansonsten scheint es jetzt dann erst mal doch zu laufen.

Danke aber trotzdem für eure Mühe!
Sind trotzdem interessante Links wo das Durchlesen sicher nicht schadet :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz