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