Autor Beitrag
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Mi 05.03.03 21:06 
Titel: HI
Ich poste hier mal ne demo zum Thema Dienste:
Hoffentlich nimmts mir keiner Übel: :wink:
Das einzige was du brauchst ist ein Form: TServiceApplication (Datei-Neu-Service-Application):

ausblenden volle Höhe 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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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 ? :roll:

Ab welcher Delphi-Version gibt es den Schalter /SILENT ?
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Fr 07.03.03 19:10 
Si Senior/Senora.
Einfach ganz einfach.
Den Schalter Silent :roll: keine Ahnung.
MFG
MSCH
bis11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Fr 07.03.03 19:17 
Ich danke MSCH.

@all Jetzt muss ich das nur noch mit dem Schalter \SILENT wissen.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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