AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Service erstellen...

Ein Thema von JamesBlond · begonnen am 17. Mär 2004 · letzter Beitrag vom 17. Mär 2004
Antwort Antwort
JamesBlond

Registriert seit: 17. Mär 2004
Ort: PB
25 Beiträge
 
Delphi 5 Enterprise
 
#1

Service erstellen...

  Alt 17. Mär 2004, 07:47
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Service erstellen...

  Alt 17. Mär 2004, 07:53
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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
JamesBlond

Registriert seit: 17. Mär 2004
Ort: PB
25 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Service erstellen...

  Alt 17. Mär 2004, 08:04
Habe den Timeraufruf im OnCreate
das onexecute-Ereignis ist leer.
woran kann's noch liegen?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Service erstellen...

  Alt 17. Mär 2004, 08:40
Es kann noch an einem Fehler im OnCreate bzw. OnStart liegen. Zeige doch mal dne Code dieser und davon abhängiger Methoden

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
JamesBlond

Registriert seit: 17. Mär 2004
Ort: PB
25 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Service erstellen...

  Alt 17. Mär 2004, 08:49
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Service erstellen...

  Alt 17. Mär 2004, 10:12
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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
JamesBlond

Registriert seit: 17. Mär 2004
Ort: PB
25 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Service erstellen...

  Alt 17. Mär 2004, 10:55
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Service erstellen...

  Alt 17. Mär 2004, 11:31
Zitat von JamesBlond:
Wie kann man eine Service-Anwendung denn am besten debuggen?
http://www.delphipraxis.net/internal...ect.php?t=6952

Sollte helfen.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.608 Beiträge
 
#9

Re: Service erstellen...

  Alt 17. Mär 2004, 12:22
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz