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