AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Dienst/Service oder VCL-Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst/Service oder VCL-Anwendung

Ein Thema von Jens Hartmann · begonnen am 23. Dez 2010 · letzter Beitrag vom 25. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 14:08
Hallo zusammen,
ich habe mal eine Frage um einen Lösungsansatz zu bekommen.
Ich bemühe mich zurzeit meine Anwendung mit einem Web-Client zu erweitern. Diese werde ich vermutlich über IntraWeb machen.

Über die aktuelle VCL-Anwendung lese ich Daten von einer Com-Schnittstelle und speichere diese in einer Datenbank.
Ziel ist es jetzt, dies Datenbank über Webbrowser abzufragen.
Da die Abfrage über den Webbrowser erfolgen soll, überlege ich zurzeit die VCL Anwendung neu zu schreiben und nur noch so eine Art Com-Server zu Programmieren, der lediglich Daten lesen und speichern kann. „Keine Benutzeroberfläche“.
Jetzt wäre natürlich die Frage, macht man das am besten als normale VCL-Anwendung und legt diese in die Autostart, oder eventuell besser als Dienst.

Für beides sehe ich zurzeit Vor- und Nachteile.

Vorteil VCL-Anwendung unter allen Betriebssystemen mit einem Art Logfenster für den User sichtbar.
Nachteil VCL-Anwendung, es muss eine Windows Benutzer angemeldet werden.

Vorteil Dienst/Service, läuft auch ohne Windows Benutzeranmeldung.
Nachteil Dienst/Service, unter Windows Vista und 7 keine interaktiven Dienst mehr möglich, wodurch ich zurzeit vermutlich nur eine Log-File schreiben lassen könnt um eventuell Probleme fest zustellen.

Nachteil Dienst/Service, ich weiß nicht, ob ich die Anbindung an die Com-Schnittstelle Problemlos mit einem Dienst unter Win7 etc. programmieren kann.
Vielleicht könnt Ihr mir ja mal sagen, wir Ihr sowas machen würdet.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 14:43
Hier mein Thread zu dem Thema.
Ich habe mich dann für eine "versteckte" VCL-Anwendung entschieden.
Das war für meine Zwecke das Einfachste.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 15:05
Hallo stahli,

diesen Thread kenne ich. Aber trotzdem Danke.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 17:32
Definitiv als Dienst, denn du hast noch ein paar Vorteile eines Dienstes vergessen:

- einfaches Beenden, Pausieren, Starten und Neustarten des Dienstes
- hängt sich der Dienst weg, so kann Windows den Dienst automatisch wieder starten

Natürlich sollte der Dienst fehlerfrei laufen, aber er kann halt auch mal Zicken und da ist ein automatisches Wiederherstellen eben komfortabler.

Log-Meldungen kann man auch per Socket-Server an die Clients übertragen. Somit wäre es auch möglich, den Log-Client auf mehreren Rechnern laufen zu lassen und jeder bekommt die Infos mitgeteilt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 18:20
Zitat von Sir Rufo:
Minuten
Definitiv als Dienst, denn du hast noch ein paar Vorteile eines Dienstes vergessen:.....
Gibt es denn ein gutes deutschsprachiges Tutorial. Hier im Forum gibt es zwar hunderte Beiträge, allerdings habe ich noch nichts gefunden, was ich so richtig verstehe. Deshalb wäre halt ein deutschsprachiges Tutorial total genial.
Außerdem würde mir das wahrscheinlich helfen, die Aufgabe und Arbeitsweise eines Dienstes besser zu verstehen.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 19:52
Die beste Herangehensweise ist IMHO folgende:

Bau Dir einen/mehrere Thread/s, der/die alle gewünschten Funktionen ausführen.
Für die Entwicklung dieser Threads packst du die in ein VCL-Projekt.

Laufen die Threads dann nimmst du die Service-Vorlage und benutzt das Service-Geraffel nur als Wrapper für die Threads.
(So wie du für die Entwicklung die Form mit Buttons belegst, die die Threads steuern)

Vorteil: Du hast die gleiche Funktionalität einmal als VCL-App (mit Log-Ausgabe im Fenster) und als Service-App
In einer Projekt-Gruppe kannst du auch immer beide gleichzeitig erzeugen lassen.

Ein Tut ist mir so nicht bekannt, aber ich kann mal schauen, ob ich da so eine kleine Service-Anwendung mit Doku basteln kann.
Da ist eh nix groß geheimnisvolles dran ... aber halt wie so oft im Leben, man muss es erst mal verstanden haben, was die da von einem wollen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 20:01
Zitat von Sir Rufo:
Da ist eh nix groß geheimnisvolles dran ... aber halt wie so oft im Leben, man muss es erst mal verstanden haben, was die da von einem wollen
Das ist genau mein Problem. Aber ich denke Dein vorgehen scheint mir sinnvoll. Ich finde es sogar gut, dann hätte ich den Dienst gleichzeitig als VCL-Anwendung zum testen etc.

Gute Idee, dann geh ich mal so vor.

Danke schon mal und Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 21:35
Ich habe hier ein Tutorial gefunden (englisch)
http://www.tolderlund.eu/delphi/service/service.htm
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 21:51
Ich schreibe meine Server-Anwendungen immer als Service mit Webinterface. Über das Webinterface steuert, überwacht und konfiguriert man den Service.

Die Komplette Logik ist in einer Klasse abgelegt die etwa so aussieht:

Delphi-Quellcode:
  TServiceState = (ssStopped, ssRunning, ssPaused);
  TServiceClass = class( TObject )
  protected
    FState: TServiceState;
    FIsService: Boolean;
    function GetServiceName(): String; virtual;
    function GetDisplayName(): String; virtual;
    function GetDescription(): String; virtual;
  public
    constructor Create(); virtual;
    destructor Destroy(); override;

    procedure Start(); virtual;
    procedure Stop(); virtual;
    procedure Pause(); virtual;
    procedure Resume(); virtual;
    procedure Restart(); virtual;
    procedure Execute(); virtual;

    property State: TServiceState read FState;
    property ServiceName: String read GetServiceName;
    property DisplayName: String read GetDisplayName;
    property Description: String read GetDescription;
    property IsService: Boolean read FIsService;
  end;
(In der Realität ist das ganze etwas komplizierter, ich kann aber meine Vorlage nicht einfach so open source stellen. Aber es geht hier ums Prinzip.)

Dann habe ich zwei Projekte - ein VCL Projekt und ein Service - die jeweils die Funktionen in der oben genannten Klasse aufrufen. Somit Programmiert man die Logik nur einmal, kann sie im VCL Projekt testen und debuggen und hat dann für den produktiven Betrieb einen Service.

Das macht das Entwickeln eines Services wesentlich einfacher. Allerdings muss man aufpassen, da ein Service eben nicht ganz unter den selben Bedingungen läuft wie eine übliche Windows Applikation. Das betrifft z.B. das aktuelle Verzeichnis, Window Handles (versuch mal Window Messages in einem Service zu behandeln) und z.B. darf man nicht vergessen CoInitialize() aufzurufen wenn man COM benutzen will (direkt oder indirekt). Auch läuft ein Dienst in der Regel unter dem System Benutzer, was andere Zugriffsrechte zur Folge hat. Z.B sind Netzlaufwerke die man eingerichtet hat unter dem Systembenutzer nicht zugänglich.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Dienst/Service oder VCL-Anwendung

  Alt 25. Dez 2010, 10:47
Hallo und schöne 1. Weihnachten zusammen.

Zitat von Sir Rufo:
Ich habe hier ein Tutorial gefunden (englisch)
http://www.tolderlund.eu/delphi/service/service.htm
Danke erstmal, trotz englisch bin ich recht gut damit zurecht gekommen. Also ich denke, der Lösungsansatz "Dienst mit Threads" scheint mir am besten für mein Programm geeignet. Allerdings habe ich ein kleines Verständnisproblem. Ich habe jetzt mal meine ersten Threads geschrieben. Und auch dazu ein gutes Tutorial gelesen.
http://www.michael-puff.de/Programmi...mit_Delphi.pdf

Ich würde jetzt gerne eine VCL-Anwendung mit den entsprechenden Threads schreiben und anschließend den Dienst erstellen. Hierzu, so habe ich das zumindestens Verstanden, muss ich natürlich die gesamten Funktionen die ich benötige in die Threads auslagern. Das würde für mich bedeuten, ich müsste die Komponente CPortLib "ComPort" zur Laufzeit in dem Thread erzeugen.

Geht sowas, und wie macht man sowas. Findet man dazu was im Netz. Viel muss der Thread ja nicht machen, er muss lediglich den entsprechende ComPort erzeugen, diesen öffnen und anschließende Daten von der Com-Schnittstelle lesen. Zusätzlich müssten dies in eine Datenbank geschrieben werden. Also brauchte ich wahrscheinlich auch eine TZConnection und Query, die ich zur Laufzeit erzeuge.

Hmmm...

Oder legt man die Komponenten einfach auf die VCL-Form und in den Dienst und grieft über den Thread darauf zu. Das würde ja bedeuten, das die Kompos in der VCL-Anwendung und im Dienst den selben Namen haben müssten.

Mann ist das alles kompliziert. Ich hoffe ich konnte mein Vorhaben einigermaßen beschreiben.

Also nochmal schöne Weihnachten und Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 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