Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi vorhandene VCL Anwendung als Windows Dienst (https://www.delphipraxis.net/216866-vorhandene-vcl-anwendung-als-windows-dienst.html)

AJ_Oldendorf 14. Mär 2025 06:35

vorhandene VCL Anwendung als Windows Dienst
 
Guten Morgen zusammen,
da die Suche aktuell hier nicht geht, frage ich einfach mal nach.
Ein Kunde von uns fragt an, ob wir unsere vorhandene VCL Anwendung (sehr umfangreich, viele Fenster, Multi-Threading-Anwendung, Verwendung von Indy für Netzwerkkommunikation etc) als Windows Dienst laufen lassen können, damit kein User am Betriebssystem angemeldet sein muss.
Mit Windows Diensten haben wir uns noch nie beschäftigt.
Daher ein paar Fragen dazu:
1) Kann man eine komplexe VCL-Anwendung als Windows Dienst laufen lassen?
2) Kann ein Dienst eine GUI-Oberfläche haben oder wie kann man entsprechende Einstellungen/Konfigurationen in der Software vornehmen?
3) Gibt es andere Mechanismen, um den Kunden seinen Dienst zu liefern und trotzdem die VCL Anwendung laufen zu haben?

Wenn ihr da Anregungen und Tipps habt, bin ich gespannt diese zu lesen :-)

jaenicke 14. Mär 2025 07:13

AW: vorhandene VCL Anwendung als Windows Dienst
 
Grundsätzlich kannst du eine VCL-Anwendung als Dienst laufen lassen. Allerdings hast du keine Möglichkeit (mehr, früher gab es interaktive Dienste), deren Oberfläche zu sehen. Deshalb macht das wenig Sinn, ohne diese zu modifizieren.

Zur Steuerung eines Dienstes bietet sich eine Trayanwendung an, die im einfachsten Fall nur aus dem Icon und einem Konfigurationsfenster besteht. Diese kann dann mit dem Dienst kommunizieren. Oder der Dienst stellt eine Webanwendung bereit, die aus Sicherheitsgründen nur lokal abrufbar sein sollte. Ich persönlich habe die Dienst-Anwendung so gestaltet, dass je nach Aufruf (Dienstkontext oder Desktop) entweder ein Dienst gestartet wird oder ein VCL-Fenster angezeigt wurde. So konnte ich dort dann auch direkt Knöpfe zur Installation und Deinstallation des Dienstes anbieten.

Ein erster Umbau der Anwendung muss gar nicht so aufwendig sein, wenn die Oberflächenlogik einigermaßen von der Programmlogik getrennt ist. Wenn sich die Funktionalität natürlich um das Hauptfenster herum dreht, sprich dort der Dreh- und Angelpunkt ist, ist der Aufwand höher.

Ich würde in jedem Fall dazu raten, die Anwendung so umzubauen, dass sie ohne ein sichtbares Fenster ihre Arbeit verrichten kann. Sie kann durchaus Fenster unter der Haube nutzen, solange sie nicht sichtbar sein müssen. Das ist zwar nicht ideal, aber im ersten Schritt nicht schlimm.

Bernhard Geyer 14. Mär 2025 09:00

AW: vorhandene VCL Anwendung als Windows Dienst
 
Zitat:

viele Fenster
D.h. eine Anwendung die normale Anwender interaktiv bedienen?
Oder ist das nur Konfig und der normale Ablauf ist das "Nach knopfdruck" alles automatisiert ablauft und man nur "hin und wieder draufschaut, ob alles passt"

Wenn 1 -> Lass es mit dienst und überlege ob die Anwendung nicht irgendwann mal sinnvoll as WebAnwendung im Browser anbieten willst
Wenn 2 -> 2 Exe erstellen. Erste zur Konfig und 2te als Dienst ohne GUI.

AJ_Oldendorf 14. Mär 2025 11:01

AW: vorhandene VCL Anwendung als Windows Dienst
 
Also es handelt sich um eine Anwendung, die vollständig über eine VCL bedienbar ist (eine Maschine lässt sich damit steuern). An dieser Anwendung sind über Indy Sockets Stationen angeschlossen, die mit dieser Anwendung kommunizieren. Die ganze GUI Eingabe lässt sich auch an den externen Stationen durchführen, Ausführendes Organ ist aber die Haupt VCL Anwendung (die jetzt als Dienst laufen soll).

Also kurz zusammengefasst, ich kann eine VCL Anwendung als Dienst laufen lassen, habe aber KEINE Oberfläche mehr. Richtig?
Das heißt, wenn meine externen Stationen alle ausgeschaltet wären oder das Netzwerk nicht geht, kann ich die Haupt-VCL Anwendung nicht mehr bedienen?

Noch als Hintergrund, die Anwendung ist als multithreading ausgelegt und versucht so echtzeitnah zu arbeiten wie möglich (ich weiß, Windows und Echtzeitfähigkeit...-> darum geht es hier aber nicht)

Bernhard Geyer 14. Mär 2025 12:36

AW: vorhandene VCL Anwendung als Windows Dienst
 
Zitat:

... Die ganze GUI Eingabe lässt sich auch an den externen Stationen durchführen ...
... Das heißt, wenn meine externen Stationen alle ausgeschaltet wären oder das Netzwerk nicht geht, kann ich die Haupt-VCL Anwendung nicht mehr bedienen?
Kannst du nicht eine "pseudoexterne Station" lokal laufen lassen, die mit dem eingeloggten User gestartet werden kann?
Dann hättest du ja die Eingebemöglichkeit?
Oder ist diese "externe Station" kein normales Windows-programm?

HolgerX 14. Mär 2025 12:37

AW: vorhandene VCL Anwendung als Windows Dienst
 
Hmm...

Einfache Fragen:
Muss beim Starten der Anwendung irgendwas durch einen User gemacht werden (Anmelden, einen 'Start' Knopf klicken)?
Zeigt die Hauptanwendung (Dienst) im Lauf Meldungsfenster oder benötigt direkte Eingaben von einem User?

Wenn Du diese Fragen mit Ja beantworten musst, dann ist die Anwendung nicht als Dienst verwendbar!

Es kann nur eine (normale) Applikation sinnvoll als Dienst installiert werden, wenn diese ohne Interaktion startet und dann ohne Meldungsfenster läuft.

Hierbei ist es unerheblich, was diese Anwendung dann macht ;)

Redeemer 14. Mär 2025 12:41

AW: vorhandene VCL Anwendung als Windows Dienst
 
Warum Dienst und keine Aufgabe?

Uwe Raabe 14. Mär 2025 13:37

AW: vorhandene VCL Anwendung als Windows Dienst
 
Du kannst den nicht-visuellen Teil als Dienst laufen lassen und für den visuellen Teil auf dem Haupt-PC denselben Client laufen lassen wie auf den Stationen (per localhost mit dem Dienst verbunden).

Damit kann (und sollte) der Dienst von allen visuellen Forms befreit werden. Also eine klassische Client-Server Architektur.

vnvjan 14. Mär 2025 15:04

AW: vorhandene VCL Anwendung als Windows Dienst
 
Vlt damit probieren: https://nssm.cc/

TurboMagic 14. Mär 2025 15:43

AW: vorhandene VCL Anwendung als Windows Dienst
 
Hallo,

wenn es nur darum geht, dass niemand unbefugtes in dem UI "rumfummelt" einfach einen
Sperren Button einbauen der einen Modalen passwort Dialog anzeigt. Nur wer das "Admin Passwort"
für die Anwendung kennt kann den Dialog dann schließen und amit arbeiten.

Wäre eine eher kleine Änderung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Seite 1 von 2  1 2      

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