Zitat von
Mavarik:
Zitat von
nahpets:
das klingt so, als wolle da ein Porgramm, Dienst.. starten, während das System heruntergefahren wird.
Nein eigentlich macht der Dienst gerade nix, bzw. wartet auf eine SetEvent
Die mag durchaus richtig sein, aber: Wenn der Dienst bereist auf da Beendensignal reagiert hat und beendet wurde und nun (warum auch immer) beim Herunterfahren neu startet, kann das von Dir beschriebene Problem auftreten. Das heißt: Fehlerursache muss nicht in Deinem Dienst liegen.
Zitat von
Mavarik:
Zitat von
nahpets:
Der Dienst ist so konfiguriert, das er, sofern er (unbeabsichtigt?) beendet wird, automatisch neu gestartet wird.Ist in der Dienstekonfiguration auf dem Reiter "Wiederherstellen" eventuell irgendwas konfiguriert, was beim Dienstausfall zu geschehen hat?
Eigentlich auch nicht der dienst wird erzeugt mit:
Service := CreateService(SCManager, ServiceName, DisplayName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, pchar(FileName), nil, nil, nil, nil, nil);
Siehe oben: Wenn das beim Herunterfahren aufgerufen wird, kann der beschriebene Fehler auftreten. Das Betriebssystem ist also quasi schon halb weg, aber der Dienst wurde veranlasst, zu starten.
Zitat von
Mavarik:
Zitat von
nahpets:
Oder ist der Dienst so geschrieben, dass er sich im Fehlerfalle eventuell neu startet?
Nicht das ich wüsste...
Gibt es nicht auch sowas für dies für Dienste?
procedure WMQUERYENDSESSION(var msg: TMessage); message WM_QUERYENDSESSION;
Weiß ich nicht.
Zitat von
Mavarik:
oder erhalten die "nur" einen Stopevent...
Kann es sein, dass ich einfach nicht schnell genug alle erzeugten Threads beende?
Mavarik
Ja, oder eventuell sogar noch neue erzeugt werden. Ich weiß leider nicht, ob man die Wartezeit des Betriebssystems bis zum Beenden von Diensten irgendwie konfigurieren kann. Dies könnte zumindest bei der Fehlersuche hilfreich sein, frei nach dem Motto: Wartezeit ist länger, Problem ist weg. Dann: Der Dienst beendet sich nicht schnell genug. Damit hast Du dann einen Ansatzpunkt für die Fehlersuche /-behebung.