![]() |
mhmm, wenn ich das richtig sehe kann ich mit dieser unit zwar andere Dienste steuern, aber mein Problem ist damit immer noch nicht gelößt, ich möchte ja meine eigene Anwendung so als Dienst laufen lassen, das ich auf die VCL komponenten (spez. TFTPServer, TPopupMenue und Timer) zugreifen kann.
|
D7:
Datei - Neu - Weitere.. - Service-Anwendung. Dann hast du eine Unit Service1. Dort kannst du dann dein procedures und functions, und alle nicht Visuellen Komponenten verwenden. Also dein Code schreiben. Du kannst auch Formen verwenden, dann mußt du aber die Eigenschaft "Interactive" vom Service auf True setzen. Unter "Display-Name" trägst du den Namen ein, der unter dem Dienstmanager von NT erscheinen soll. Anschließend Compilieren, nicht Starten. DOS-Fenster öffnen, dann PFAD\PROG.exe -install eingeben. Danach ist dein Dienst unter NT vorhanden. "net start Dienstname" startet deinen Dienst, "net stop Dienstname" stoppt ihn wieder. Mit PFAD\PROG.exe -uninstall entfernst du ihn wieder. Das debuggen ist da schon etwas aufwendiger. Man kann sich zwar mit Diensten aus der IDE Verbinden, aber ich erzeuge mir immer Log-Dateien, schreibe mir die Werte da hinein, und werte das Ganze anschließend aus. Noch Fragen ? |
Hätte noch eine frage!
Gibt es ne möglichkeit einen Service zu schreiben, dass er als service und als normales Program funktioniert? Also das es auch funktioniert, wenn es nicht installiert ist und ich die exe normal starte? |
Geht bestimmt. Ich weiß aber nicht wie. Würd mich aber auch brennend interessieren. :mrgreen: :mrgreen:
|
Machs doch wie beim Apache.
Ohne Parameter starten -> normaler Betrieb Mit best. Parametern starten -> Installation/Start als Service |
und wie erkläre ich ihm, dass er bei normalem betrieb normal starten soll?
Also ich hab mal ein bissle rumprobiert, und wenn ich in die eigenschaft onExecute ne
Code:
setze wird beim normalen ausführen einafch diese endlosschleife ausgeführt, das heißt er beendet nicht, erst wenn die variable laufe auf false gesetzt wird geht er aus der schleife und beendet dadurch die anwendung. Müßte man nur noch abfangen, ob bestimte parameter gesendet wurden und irgendwie prüfen, ob normal ausgeführt oder ob per net start gestartet (fals man das muß)
server.start;
while laufe do begin sleep(1); application.ProcessMessages; end; Aber wird doch sicher ne elegantere lösung geben? |
Hi Chewie,
Hast du das schon mal gemacht? Meiner Meinung nach basiert eine Anwendung ja auf TApplication und ein Service auf TService. Ist das den in einem Programm vereinbar? Obwohl wenn man beide Klassen implementiert? Hm, ich werde das mal ausprobieren, mal sehen obs klappt. Wenn du dazu ein Beispielcode hast, dann poste ihn doch mal. |
Also services sind ganz normale Programme, mit einer kleinen besonderheit. Sie haben bestimmte prozeduren. Diese prozediren werden vom Service manager angesprochen, solten diese nicht vorhanden sien gibt der service manager fehler beim starten/beenden oder anderen aktionen aus. Einziges problem, wenn man eine Service-Anwendung erstellt beendet sich diese nach einem normalen ausführen selbstständig wieder. Die stelle an der sich die Anwendung beendet sollte aber auffindbar sein ;)
Ach, was noch funktioniert: global: var exec:boolean; im onStart und onStop des Services einfach exec:=false; im oncreate einfach exec:=true; und im onClose while exec do application.processmessages; //es muß die Unit Forms als letzte eingetragen werden! Dann beendet sich das programm bei einem normalen starten nicht mehr! (funst bei mir recht gut, es belegt jedoch alle freie CPU auslastung.) |
Zitat:
Aber es muß doch auch ohne volle CPU-Auslastung gehen, geht bei Apache ja auch :mrgreen: |
geht, verlangsamt aber das programm ein wenig!
und im onClose while exec do begin application.processmessages; sleep(1); end; na ja, ich guck heute abend mal wo dieses blödsinnige beenden, fals es normal gestartet wurde steht :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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 by Thomas Breitkreuz