| Autor |
Beitrag |
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 05.03.03 13:44
Hallo Leute,
ich habe schon die Tutorials von Delphi-Source.de und Assarbad gelesen und durchgearbeitet. Ich steige da bloß nicht richtig durch. Wie kann ich jetzt mit Delphi einen eigenen NT-Service programmieren. Ich brauche keine Fenster und auch keine Benutzerintervention. Der Service soll mir lediglich beim starten nur etwas überwachen und gegebenenfalls etwas löschen. Wer kann mir weiterhelfen ?
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 05.03.03 17:52
Hat keiner noch andere Anleitungen, Bücher, Links etc. für mich, wo das drin erklärt wird ?
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 05.03.03 18:00
Hallo,
wenn du eine Professional hast, kannst du mit Datei->Neu->{andere->}Service-Anwendung anfangen.
Weitere Infos gibt es dann in der Online Hilfe.
Gruß
Klabautermann
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 05.03.03 19:38
Das habe ich ja schon gemacht. Nur ich habe halt nicht so die Ahnung, wie ich anfangen soll und wie nachher der Dienst installiert wird. In der Delphi Hilfe habe ich nichts aussagekräftiges gefunden, oder ich war mal wieder zu blind.
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mi 05.03.03 21:06
Titel: HI
Ich poste hier mal ne demo zum Thema Dienste:
Hoffentlich nimmts mir keiner Übel:
Das einzige was du brauchst ist ein Form: TServiceApplication (Datei-Neu-Service-Application):
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: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123:
| unit main;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,ShellCtrls;
TZVS2VBU = class(TService) procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceShutdown(Sender: TService); procedure ServicePause(Sender: TService; var Paused: Boolean); procedure ServiceContinue(Sender: TService; var Continued: Boolean); procedure ServiceStop(Sender: TService; var Stopped: Boolean); procedure ServiceExecute(Sender: TService); private { Private-Deklarationen } inputfolder: String; // Directory originalfiles SCN: TShellChangeNotifier; SCNActive: Boolean; FileList:TStringList; Function FileCopy(Source,dest:String;Moving:Boolean):Boolean; public procedure SCNChange; function GetServiceController: TServiceController; override; end;
var ZVS2VBU: TZVS2VBU;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall; begin ZVS2VBU.Controller(CtrlCode); end;
function TZVS2VBU.GetServiceController: TServiceController; begin Result := ServiceController; end;
// Starten des Dienstes procedure TZVS2VBU.ServiceStart(Sender: TService; var Started: Boolean); begin FileList:= TStringList.Create; SCNActive:= false; SCN:= TShellChangeNotifier.Create(nil); SCNActive:= True; SCN.NotifyFilters:=[nfFileNameChange,nfDirNameChange,nfAttributeChange,nfSizeChange,nfWriteChange,nfSecurityChange]; SCN.Root:= Inputfolder; SCN.WatchSubTree:= False; SCN.OnChange:= SCNChange; started:= true; end;
procedure TZVS2VBU.ServiceShutdown(Sender: TService); begin SCNActive:=False; end;
procedure TZVS2VBU.ServicePause(Sender: TService; var Paused: Boolean); begin SCNActive:= False; Paused:= true; end;
procedure TZVS2VBU.ServiceContinue(Sender: TService; var Continued: Boolean); begin SCNActive:= True; Continued:= True; end;
procedure TZVS2VBU.ServiceStop(Sender: TService; var Stopped: Boolean); begin SCNActive:=False; try SCN.Free; except end; try FileList.Free; except end; stopped:= true; end;
procedure TZVS2VBU.SCNChange; var I:Integer; Path:String; SR: TSearchRec; FoundName:String; P:PChar; begin if SCNActive then begin SCNActive:= False; Path:= IncludeTrailingBackslash(InputFolder); I:= FindFirst(Path+'*.*',faAnyFile and not faDirectory,SR); if I=0 then FoundName:= SR.Name else FoundName:=''; FindClose(SR); if (FoundName<>'')and(FileList.IndexOf(FoundName)<0) then begin begin nu mach ma was end; SCNActive:= True; end; end;
procedure TZVS2VBU.ServiceExecute(Sender: TService); begin while not Terminated do begin ServiceThread.ProcessRequests(true); end; end;
end. |
Ich hab mal die unwichtigen Dinge wie Eventlog rausgeschmissen. Dieser Dienst überwacht ein Verzeichnis (Inputfolder) und führt was aus, wenn sich was Ändert an Dateien. Damit der das nur einmal macht, benutzte ich eine Stringliste in der der bearbeitete Dateiname steht. Kann man natürlich modifizieren. Aber es funktioniert. Ich hab hier nur mal Findfirst genommen keine While-Schleife mit FindFirst/FindNext, weil das Ereignis sowieso für jede Datei aufgerufen wird. Kann man auch modifizerien.
Grüße
MSCH
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 06.03.03 10:23
Ein absolut unverzichtbares Buch wenn du Services schreiben willst ist "Programing Windows Security" von Keith Brown! Dort hast du alle wichtigen Sachen, von Logon-Sessions über Tokens, WindowStations, Desktops bis zu COM-Sicherheit!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 06.03.03 10:25
Nach dem Buch habe ich auch schon gesucht. Nur ich habe das bei keinem Online-Buchhandel gefunden. Hast Du vielleicht die ISBN-Nummer ?
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Do 06.03.03 10:26
Hallo,
| bis11 hat folgendes geschrieben: | | Nur ich habe halt nicht so die Ahnung, wie ich anfangen soll und wie nachher der Dienst installiert wird. |
ich habe mal in mein Delphi Handbuch geguckt, und da wird das so beschrieben:
| Delphi 7 Handbuch hat folgendes geschrieben: | [...]
4. Nachdem Sie die Service-Anwendung erstellt haben, installieren Sie Ihre Services mithilfe des Dienstprotokoll Managers. Andere Anwendungen starten Ihre Services, indem sie Anforderungen an den Dienstprotokoll-Manager senden.
Um die Services Ihrer Anwendung zu Installieren, führen Sie sie unter verwendung der Option /INSTALL aus. [...]
Um die Services zu deinstallieren, führen Sie sie mithilfe der Option /UNINSTALL von der Befehlszeile aus. [...] |
Das Handbüch müstest du als PDF in der Updatasektion von Borland auch runterladen können oder eben in gedrckter Form bei verschieden Händlern die auch Delphi führen erwerben (warscheinlich günstiger als bei Borland selbst). Das Thema Service findest du dann im Kapitel 8.
Gruß
Klabautermann
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 06.03.03 11:59
@Motzi
Hat sich erledigt, habe das Buch gefunden und bestellt.
@Klabautermann
Wo kann ich das bei Borland runterladen ? Ich habe vorhin mal geschaut, aber nichts gefunden. Hast Du vielleicht eine Adresse ?
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Do 06.03.03 12:46
Hallo,
| bis11 hat folgendes geschrieben: | | Wo kann ich das bei Borland runterladen ? Ich habe vorhin mal geschaut, aber nichts gefunden. Hast Du vielleicht eine Adresse ? |
www.borland.com ->downloads->delphi->Updates (Version 7)
Hier musst du dich einloggen (musst also mitglied in der Borland Comunity sein)
dann findest du ziemlich weit unten "Product PDF Documentation".
Gruß
Klabautermann
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 06.03.03 15:41
Ich danke Dir erstmal Klabautermann, könntest Du mir vielleicht sagen, ob ich bei einem Service den genauso behandeln kann mit Haltepunkten wie ein normales Programm ?
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Do 06.03.03 15:53
Hallo,
das kann ich leider nicht. Ich habe zwar mi einem angefangen, das Projekt wurde aber sehr schnell wieder eingefrohren so das ich noch nciht mal zum Debuggen gekommen bin.
Gruß
Klabautermann
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Fr 07.03.03 16:53
Hi
ich danke erstmal allen beteiligten, habe jetzt meinen ersten Service erfolgreich programmiert. Ich habe nur noch eine kleine Frage, ab welcher Version ist der Schalter /SILENT dabei ? Ich progge aktuell auf Arbeit mit Delphi 4 Prof.
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 07.03.03 18:41
Titel: Debuggen von Diensten
Kleine Ergänzung,
Debuggen von Diensten geht auch, Dienst starten und Delphi->Prozess verbinden->Service auswählen.
Dann funktionieren auch Breakpoints.
mfg
MSCH
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Fr 07.03.03 18:51
Titel: Re: Debuggen von Diensten
Hallo,
| MSCH hat folgendes geschrieben: | | Debuggen von Diensten geht auch, Dienst starten und Delphi->Prozess verbinden->Service auswählen. |
wo genau wähle ich das aus?
Neugierig
Klabautermann
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 07.03.03 18:58
Im Menü wählen:
Start-Mit Prozess verbinden, dann kommt ne Liste in der dein Dienst stehen sollte wenn er läuft, Draufhauen, fertig.
Grüße
MSCH
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Fr 07.03.03 19:07
Nur noch zum Verständnis, ich compiliere, sage dann Prog.exe /install, starte meinen Dienst und dann gehe ich in Delphi zurück und führe den Menüpunkt Mit Prozess verbinden aus und wählen aus dem Fenster meine Exe aus. Habe ich das ungefähr so richtig wiedergegeben ?
Ab welcher Delphi-Version gibt es den Schalter /SILENT ?
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 07.03.03 19:10
Si Senior/Senora.
Einfach ganz einfach.
Den Schalter Silent  keine Ahnung.
MFG
MSCH
|
|
bis11 
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Fr 07.03.03 19:17
Ich danke MSCH.
@all Jetzt muss ich das nur noch mit dem Schalter \SILENT wissen.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Fr 07.03.03 21:17
Hallo,
| bis11 hat folgendes geschrieben: | | @all Jetzt muss ich das nur noch mit dem Schalter \SILENT wissen. |
das weiß ich leider auch nicht.
Gruß
Klabautermann
|
|