![]() |
Applikation als NT Service (System Dienst) unter XP starten
Guten Tag,
ich habe eine Sache vor ohne dafür das nötige Wissen mitzubringen. Und zwar möchte ich auf Windows XP eine Applikation als NT Service (System Dienst) laufen lassen. Allerdings hab ich bis jetzt noch nicht herausbekommen wie man eine *.exe als Service einträgt. Gibt es direkt von Microsoft Informationen dazu? Mit freundlichen Grüßen xpmstos |
Welche Delphi Version nutzt Du genau? Die meisten haben im Menu Datei|Neu die Auswahl für eine System-Service Anwendung.
Eine normale Applikation kann nicht als NT-Service gestartet werden. ...:cat:... |
Ich nutzte Delphi 6 Personal Englisch. Kann ich irgendwo noch genauere Informationen über die Version entnehmen, oder reicht dir diese Info aus?
Ich habe mir das gerade mal angeschaut, aber ich finde soetwas wie "System Service" nicht. Wenn ich mir eine neue Version organisieren muss, welche bietet dies an? Mit freundlichen Grüßen xpmstos |
Bei der Personal habe ich es noch nicht gefunden. Du mußt es also von Hand über die API machen. Auf
![]() |
dankeschön, ich werde dann an anderen stellen weitermachen und abwarten bis die seite wieder online ist.
Mit freundlichen Grüßen xpmstos |
Hab es geschafft auf Delphi 7 Enterprise Deutsch umzusteigen.
Dort hab ich dann eine Servie-Anwendung erstellt und diese so leer wie sie war compiliert und wollte in der Verwaltung (Win XP Prof) nachschauen wo er den ist. Allerdings ist die Anwendung nur wenig sekunden aktiv gewesen und ist dann einfach so beendet. 1. Hat das was zu sagen? 2. Kann ich in der Service-Anwendung auch sichtbare Frames mit einbauen? 3. Kann ich den Service (auf Win XP Home) so eintragen, das er nur bei einer bestimmten Benutztergruppe (oder einzelnen Benutzter) automatisch gestartet wird? Mit freundlichen Grüßen xpmstos |
ich hab ein ähnliches Problem!
Wenn ich das Tut von asserbad verwende um einen service zu starten dann funst das nur bei comandozeilen basierten Programmen, kann ich das so umschreiben, dass es auch bei Programmen mit VCL komponenten funktioniert (also das diese weiterhin arbeiten)? Wenn nicht, kann mir jemand erklären, wie ich diese Serviceanwendung mit VCL komponenten nutzen kann? Wäre super! THX schonmal |
Ich habe in folgendem Thread eine Unit gepostet, welche alle nötigen NT-Routines unterstützt.
...:cat:... P.S.: In Zukunft für eigene Probleme bitte einen neuen Thread eröffnen. :warn: |
ich mag blind, doer unausgeschlafen sein, aber welchen Threat meinst du?
Sorry, aber ich dachte das Problem ist ungefähr das gleiche udn passt deshalb hierhinein, werd mich bessern :oops: |
|
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 :) |
Ich weis ja nicht ob's noch interessiert, aber mit dem Tool "Srvany.exe" aus dem Resource Kit von Microsoft kann eine normale Applikation auch als Dienst gestartet werden.
Gruß s14 |
Zitat:
|
War bekannt (zumindest mir :mrgreen: ).
Geht auch, ist aber nicht dasselbe. Eleganter wäre es wenn Dienst und Anwendung in einem Prog wäre. |
und wie immer ist es so simpel :)
Im nachvolgenden code wird nach dem startparameter "/n" gesucht, sollte dieser vorhanden sein (beim start mit angegeben) soll als normale exe gestartet werden, wenn nicht soll als service gestartet werden.
Code:
Es sollte nun ein kinderspiel sein am angang zu überprüfen, ob die exe selbst als dienst instaliert ist, wenn ja dann soll auch als solcher gestartet werden, wenn nicht startet die exe als Anwendung. :)
program exeservice;
uses SvcMgr, forms, sysutils, Unit1 in 'Unit1.pas' {Service1: TService}; {$R *.RES} begin SvcMgr.Application.Initialize; SvcMgr.Application.CreateForm(TService1, Service1); if FindCmdLineSwitch('n', ['-', '/'], True) then forms.Application.Run; else SvcMgr.Application.Run; end. Noch fragen? |
Re: Applikation als NT Service (System Dienst) unter XP star
Also ich habe das Problem anders gelöst. Mein Problem war, das ich mehrere Programme zum Service machen wollte, allerdings ist das bei ferigen Programmen nicht sooo trivial wie es auf den ersten Blick erscheinen mag. Deshalb habe ich mir einen "
![]() Es werden auch mehrere exe's auf einmal unterstützt. Wenn das letzte dieser Programme nicht mehr läuft, dann beendet sich der Service selbsständig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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