AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Service debuggen leicht gemacht
Tutorial durchsuchen
Ansicht
Themen-Optionen

Service debuggen leicht gemacht

Ein Tutorial von gsh · begonnen am 11. Nov 2008 · letzter Beitrag vom 9. Nov 2009
 
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Service debuggen leicht gemacht

  Alt 11. Nov 2008, 14:04
Hi Leute

ich ärger mich seit Tagen mit meinem blöden Service rum. Durch log einträge schreiben und dann stunden langes "in den Code starren" kommt man zwar auch auf die Fehler drauf, aber es ist lang nicht so effektiv wie wenn man einfach mit F8 durchgehen kann
Deshalb habe ich mich heute drangemacht dieses zu verbessern und zu meiner großen Verwunderung habe ich es sogar geschafft

So genug zur Vorgeschichte nun der Code:
Einmal den Project Quellcode auf folgendes ändern:
Delphi-Quellcode:
program Project1;

{$IFDEF DebugEXE}
   {$APPTYPE CONSOLE}
{$ENDIF}

uses
  SvcMgr,
  Unit1 in 'Unit1.pas{Service1: TService};

{$R *.RES}

{$IFDEF DebugEXE}
var
  TempBool : Boolean;
begin
  Service1 := TService1.Create(nil);
  try
    TempBool := false;
    Service1.ServiceStart(nil, TempBool);
    if TempBool = false then
    begin
      Writeln('!!!Service did not start correct');
      Readln;
      exit;
    end;
    Service1.ServiceExecute(nil);
    TempBool := false;
    Service1.ServiceStop(nil, TempBool);
    if TempBool = false then
    begin
      Writeln('!!!Service did not stop correct');
      Readln;
      exit;
    end;
  finally
    Service1.Free;
  end;
{$ELSE}
begin
  if not Application.DelayInitialize or Application.Installing then
    Application.Initialize;
  Application.CreateForm(TService1, Service1);
  Application.Run;
{$ENDIF}
end.
Dann noch eine kleine Nachrichtenschleife bzw. ein ReadLn damit die Anwendung nicht gleich wieder weg ist:
Delphi-Quellcode:
procedure TService1.ServiceExecute(Sender: TService);
begin
{$IFDEF DebugEXE}
  Readln;
{$ELSE}
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(False);
    sleep(20);
  end;
{$ENDIF}
end;
So wenn man jetzt unter den Projektoptionen -> Verzeichnisse/Bedingungen -> Definition den Wert DebugEXE einträgt dann wird es nach dem nächsten kompilieren eine direkt startbare und debugbare Exe heraus. Lässt man die Definition wieder weg wird es wieder ein normaler Service der installiert werden kann.

So viel Spaß damit
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
 


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 08:43 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 by Thomas Breitkreuz