Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Service erstellen... (https://www.delphipraxis.net/18347-service-erstellen.html)

JamesBlond 17. Mär 2004 07:47


Service erstellen...
 
Hallo!
Hbae eine Unit zum auslesen der Event-Logs geschrieben. Diese möchte ich nun in einem Service benutzen. Des Service erstellen ist auch nicht das Problem, aber dieser beendet sich automatisch immer wieder nach ca. 20 sek. Woran liegt das und wie kann ich "ihn am Leben halten"?
Habe das ganze halt über nen Timer gemacht und dann soll er die Eventlogs eigentlich alle 2 Minuten auf neue Einträge prüfen.
Hat einer ne Idee, warum sich das Programm immer wieder beendet?
Danke!
Gruß

Matthias

sakura 17. Mär 2004 07:53

Re: Service erstellen...
 
Du darfst keinen Code in das OnExecute Ereignis schreiben. Steht da Code, so wird dieser ausgeführt und anschließend der Service beendet. Nutze stattdessen z.B. eine Timer-Komponente, welche in regelmäßigen Abständen Deine "Wünsche erfüllt".

In diesem Thread findest Du ein Beispiel für obige Idee: http://www.delphipraxis.net/internal...ct.php?t=20553

...:cat:...

JamesBlond 17. Mär 2004 08:04

Re: Service erstellen...
 
Habe den Timeraufruf im OnCreate
das onexecute-Ereignis ist leer.
woran kann's noch liegen?

sakura 17. Mär 2004 08:40

Re: Service erstellen...
 
Es kann noch an einem Fehler im OnCreate bzw. OnStart liegen. Zeige doch mal dne Code dieser und davon abhängiger Methoden ;-)

...:cat:...

JamesBlond 17. Mär 2004 08:49

Re: Service erstellen...
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  extctrls, Eventlog;

type
  TLogtray = class(TService)
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
    procedure ServicePause(Sender: TService; var Paused: Boolean);
  private
    { Private-Deklarationen }
      mytimer: TTimer;
  public
    function GetServiceController: TServiceController; override;
    procedure TimerEvent(Sender:Tobject);
    procedure Timer;
    { Public-Deklarationen }
  end;

var
  Logtray: TLogtray;
  anz_alt: Integer;

implementation

{$R *.DFM}

procedure TLogtray.TimerEvent(Sender:TObject);
var
  anz_neu: Integer;
  List: TSTringList;
BEGIN
  anz_neu:= getLogNumber('System');
  if anz_neu >= (anz_alt+10)
  then
  BEGIN
    mytimer.Enabled:= false;
    getEventLog('Application', 10, List);
    List.SavetoFile('C:\Application.txt');
    getEventLog('System', 10, List);
    List.SavetoFile('C:\System.txt');
    getEventLog('Security', 10, List);
    List.SavetoFile('C:\Security.txt');
    anz_alt:= anz_neu;
    mytimer.Enabled:= true;
  END;

END;

procedure TLogtray.Timer;
BEGIN
  mytimer:= TTimer.create(nil);
  mytimer.interval:= 10000;
  mytimer.OnTimer:= TimerEvent;
  mytimer.Enabled:= true;
END;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Logtray.Controller(CtrlCode);
end;

function TLogtray.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;
procedure TLogtray.ServiceCreate(Sender: TObject);
begin
  anz_alt:= 0;
end;

procedure TLogtray.ServiceStart(Sender: TService; var Started: Boolean);
begin
  Timer;
end;

end.
So, das wäre der Teil. Keine Ahnung wo er da hängt.

Danke schonmal für die hilfe!

Gruß

Matthias

sakura 17. Mär 2004 10:12

Re: Service erstellen...
 
Versuche mal folgende Änderung.

Delphi-Quellcode:
procedure TLogtray.TimerEvent(Sender:TObject);
var
  anz_neu: Integer;
  List: TSTringList;
BEGIN
  TRY
    anz_neu:= getLogNumber('System');
    if anz_neu >= (anz_alt+10)
    then
    TRY
      mytimer.Enabled:= false;
      getEventLog('Application', 10, List);
      List.SavetoFile('C:\Application.txt');
      getEventLog('System', 10, List);
      List.SavetoFile('C:\System.txt');
      getEventLog('Security', 10, List);
      List.SavetoFile('C:\Security.txt');
      anz_alt:= anz_neu;
    FINALLY
      mytimer.Enabled:= true;
    END;
  EXCEPT
    // evtl. loggen, aber EXCEPT stehen lassem
  END;
END;
...:cat:...

JamesBlond 17. Mär 2004 10:55

Re: Service erstellen...
 
Hallo!
Also, jetzt beendet er sich zwar nicht mehr, aber es wird nichts gemacht. Wie kann man eine Service-Anwendung denn am besten debuggen? Wenn ich das "normal" in Delphi starte, beendet es sich sofort wieder.
Danke!
Gruß

Matthias

sakura 17. Mär 2004 11:31

Re: Service erstellen...
 
Zitat:

Zitat von JamesBlond
Wie kann man eine Service-Anwendung denn am besten debuggen?

http://www.delphipraxis.net/internal...ect.php?t=6952

Sollte helfen.

...:cat:...

Phoenix 17. Mär 2004 12:22

Re: Service erstellen...
 
Du kannst den Service starten und dann in der IDE sagen: Start -> Mit Prozess verbinden.
Dann wählst Du den Dienst aus.

Ist zwar etwas umständlich, funktioniert aber ganz gut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 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