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
 
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
 


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 20:50 Uhr.
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