Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dienst bringt "Zugriff verweigert" beim Herunterfahren (https://www.delphipraxis.net/61020-dienst-bringt-zugriff-verweigert-beim-herunterfahren.html)

jensw_2000 16. Jan 2006 00:03


Dienst bringt "Zugriff verweigert" beim Herunterfa
 
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
:hi:

Luckie 16. Jan 2006 00:07

Re: Dienst bringt "Zugriff verweigert" beim Herunt
 
Und was macht der Dienst?

jensw_2000 16. Jan 2006 00:21

Re: Dienst bringt "Zugriff verweigert" beim Herunt
 
Er ruft in Intervallen ein paar PC's über ISDN an, und holt von dort Informationen ab.
Die "Jobsteuerung" ist auf Alzaimars genialem Thread-Job Beispiel aufgebaut.

Wenn ein Thread läuft, schreibt er die abgeholten Informationen in eine DB und trennt dann die IDSN Verbindung.

Leider kann man den Fehler daran nicht festmachen. Er triff auch auf, wenn alle Threads "schlafen", also auf das Hinzufügen neuer Jobs warten.
Der Dienst macht also ausser einem WaitForSingleObject pro Thread nichts.

"Leider" kommt der Fehler nicht generell, so das man ihn mit Auskommentieren von Codepassagen lokalisieren könnte. Die Wahrscheinlichkeit, das Windows beim Heruntrfahren "meckert", liegt bei 10 bis 20%.


Schöne Grüße,
Jens
:hi:

jensw_2000 17. Jan 2006 09:18

Re: Dienst bringt "Zugriff verweigert" beim Herunt
 
Hat noch Jemand eine konstruktive Idee ?

*Push* :???:

jensw_2000 19. Jan 2006 08:49

Re: Dienst bringt "Zugriff verweigert" beim Herunt
 
Ein Versuch noch ...
*push* :zwinker:

Ich habe dem Fehler noch nicht gefunden.

Wer oder was kann dem lokalen Systemkonto beim Herunterfahren von Windows den Zugriff verweigern,
oder anders gefragt...
Was müsste das Systemkonto beim Beenden eines Dienstes und bei herunterfahrendem Windows versuchen, damit ein Fehler "Zugriff verweigert" ausgelöst werden kann ?

Hat da wirklich niemand eine Idee ?


Schöne Grüße,
Jens
:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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