Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#3

Re: Eigener Dienst beendet nicht korrekt...

  Alt 15. Jan 2009, 08:17
Hallo,

Du greifst auf eine Datenbank zu, läuft die zufällig auf dem gleichen Rechner? Dann könnte es sein, dass die (zumindest beim Herunterfahren) vor Deinem Dienst beendet wurde.
Soweit ich weiß ist die Reihenfolge, in der Dienste beim Runterfahren beendet werden, nicht definiert, daher mal das: geht / geht nicht. Das ist natürlich keine Erklärung für das manuelle Stoppen des Dienstes.

Da Du eine Methode zum Loggen hast, schreib da mal etwas mehr mit in die Logdatei, z. B. vor jeden Funktions- bzw. Prozeduraufruf alaLogFile.Log(msg4711+'vor ADOQuery.Open'); Damit der Änderungsaufwand für diese Form des "von Hand debuggen" nicht zu groß wird, mache ich das meistens so:
Am Anfang der Unit steht ein{$DEFINE VERBOSE} das bei (hoffentlicher) Fehlerfreiheit auskommentiert wird. Das Loggen steht dann in der Form im Quelltext:
Delphi-Quellcode:
{$IFDEF VERBOSE}
LogFile.Log(msg4711+'vor ADOQuery.Open')
;{$ENDIF}
Eventuell solltest Du dem Try-Finally-Block noch einen zusätzlichen Try-Except-Block gönnen, um dort auftretende Fehler loggen zu können.
Ausgehend von Deinem geposteten Quelltext kann ich auf die Schnelle kein grundlegendes Problem erkennen. Da Du aber etliche Methoden aufrufst, könnte dort irgendwo ein "Hänger" sein, z. B. ein Timeout, dass höher ist, als die Wartezeit, die Deinem Dienst beim Beenden vom Betriebssystem gegönnt wird. Und wenn mehrere Methoden auf ein Timeout warten oder nur mit nicht allzu kurzen Wartezeiten zu tuen haben, könnte das zu diesem sporadischen Problem führen.
  Mit Zitat antworten Zitat