Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Anwendung wahlweise als Service oder Formular
Nersgatt - Mo 21.10.13 11:43
Titel: Anwendung wahlweise als Service oder Formular
Moin,
ich arbeite grade an einem Service.
Ich möchte diesen Service aber wahlweise als normale Anwendung starten (vor alles zur Fehlersuche). Die Logik liegt in einem Datenmodul, das nur erzeugt und initialisiert werden muss. Ob das Datenmodul nun von einem TService oder einem TForm initialisiert wird ist egal.
Nun hab ich mir den Projektquelltext angepasst, dass ich wahlweise ein MainForm erstelle, oder halt den TService:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| program AAServer;
uses Vcl.SvcMgr, Vcl.Forms, UsrvMain in 'UsrvMain.pas', UServiceTools in 'UServiceTools.pas', UdmSrvMain in 'UdmSrvMain.pas', UfrmMain in 'UfrmMain.pas' , UParam in 'UParam.pas';
{$R *.RES}
var par : TCmdLineParams;
begin
par := TCmdLineParams.Create; try if par.StartAsApplication then begin Vcl.Forms.Application.Initialize; Vcl.Forms.Application.MainFormOnTaskbar := True; Vcl.Forms.Application.CreateForm(TfrmMain, frmMain); Vcl.Forms.Application.Run; end else begin if not Vcl.SvcMgr.Application.DelayInitialize or Vcl.SvcMgr.Application.Installing then Vcl.SvcMgr.Application.Initialize;
Vcl.SvcMgr.Application.CreateForm(TsrvServer, srvServer); Vcl.SvcMgr.Application.Run; end;
finally par.Free; end;
end. |
TcmdLineParams ist nur meine Kapselung um bequem auf die Kommandozeilenparameter zugreifen zu können. Wenn ich also der Exe ein -StartAsApplication übergebe, wird das Mainform erzeugt und gestartet. Ansonsten halt der TService. Das scheint problemlos zu funktionieren.
Meine Frage ist eigentlich ganz einfach: Kann man das so machen, oder schieß ich mir damit irgendwie ins Knie?
Danke!
jaenicke - Mo 21.10.13 11:54
Das funktioniert, ich würde das allerdings automatisch entsprechend behandeln. Das habe ich bei uns im Büro für unsere Dienste auch immer so implementiert, ebenfalls mit Datenmodulen usw.
Einen Parameter mitgeben zu müssen um die Anwendung als normale Anwendung starten zu können, finde ich jetzt nicht so schön...
Nersgatt - Mo 21.10.13 11:56
Danke, das wollte ich hören.
Ich habe es absichtlich mit Parameter gemacht. Der Parameter wird auch nicht (offiziell) dokumentiert. Die Kunden sollen das Dingen immer als Dienst starten. Das ist nur für mich eine Hilfe. Und unser Support wird das evtl. ab und an nutzen.
jaenicke - Mo 21.10.13 11:59
Nersgatt hat folgendes geschrieben : |
Ich habe es absichtlich mit Parameter gemacht. Der Parameter wird auch nicht (offiziell) dokumentiert. Die Kunden sollen das Dingen immer als Dienst starten. |
Ich finde es einfach sehr praktisch, wenn ich den Dienst einfach normal starten kann und dort dann direkt die Möglichkeit habe z.B. den Dienst zu steuern, also installieren (bei manchen unserer Dienste auch mit alternativem Namen um mehrere Instanzen zu ermöglichen), deinstallieren, starten, stoppen, ... natürlich inkl. Anfordern der Adminrechte und Statusanzeige.
Für andere Zwecke gibt es natürlich auch bei uns Parameter.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!