Einzelnen Beitrag anzeigen

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