Ich habe ein Problem beim Debuggen eines Dienstes.
Das Beenden / Neustarten des Dienstes funktiontert im laufenden Betrieb immer fehlerfrei.
Nur beim Herunterfahren / Neustarten von Windows (mit gestartetem Dienst) erhalte ich oft eine Fehlermeldung "Systemfehler 5 , Zugriff verweigert".
Der Dienst läuft unterm lokalen Systemkonto. Er hat ein TForm, das beim Dienststart erzeugt wird, und das interaktiv unter dem jeweils angemeldeten Benutzer eingeblendet wird.
Der Fehler ist derb schwehr zu finden, da er nur beim Herunterfahren des Systems auftritt.
Hat jemand dazu eine Idee ?
Hier der Code der Ereignisbehandlungsroutinen "TService.OnStop" und "TMain.OnDestroy".
Code im OnStop des Dienstes
Delphi-Quellcode:
procedure TCsService.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
service.stopped := true;
beep();
if assigned(mainform.Main) then
begin
mainform.Main.ServiceStopped := true;
mainform.Main.LEDStateTimer.Enabled := false;
end;
sleep(800);
end;
Code im OnDestroy des "Mainforms"
Delphi-Quellcode:
procedure Tmain.FormDestroy(Sender: TObject);
var
i: integer;
begin
for i := 0 to aThreads.count - 1 do
TWorkerThread(aThreads[i]).Terminate;
aJobList.Finalize(athreads.count);
while aThreads.Count > 0 do
begin
with TWorkerThread(aThreads[0]) do
begin
WaitFor;
Free;
end;
aThreads.Delete(0);
end;
aThreads.Free;
aJoblist.Clear;
aJobList.Free;
end;
Schöne Grüße,
Jens