Einzelnen Beitrag anzeigen

Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#5

Re: Fehlermeldung beim Runterfahren mit Systemdienst

  Alt 11. Dez 2009, 22:42
Hallo Mavarik.
  • Mavarik hat geschrieben:
Zitat:
oder erhalten die "nur" einen Stopevent...
Ja die Dienste erhalten über den ServiceHandler ein SERVICE_CONTROL_SHUTDOWN.
  • Mavarik hat geschrieben:
Zitat:
Kann es sein, dass ich einfach nicht schnell genug alle erzeugten Threads beende?
Ja, wenn PServiceStatus^.dwWaitHint kleiner als die Zeit, die für das Beenden aller Threadss benötigt wird, ist.

Also wie ich das verstanden habe ist dein Dienst wie folgt aufgebaut:

DispatchTable initialisieren -> @serviceproc -> ServiceName
StartServiceCtrlDispatcher -> @serviceproc
RegisterServiceCtrlhandler -> SetServiceStatus
ServiceMain -> WorkerCode + WorkerThreads -> WairFor -> Event -> ServiceHandler

Nach Signalling des Synchronisationsobjects(Event) wird in der ServiceMain aufgeräumt,
danach die Prozedure verlassen und somit sollte der Service beendet sein, und das System kann
herunterfahren.

Delphi-Quellcode:
procedure ServiceHandler(fdwcontrol: integer); stdcall;
begin
  case fdwcontrol of
    SERVICE_CONTROL_STOP:
    SERVICE_CONTROL_PAUSE:
    SERVICE_CONTROL_CONTINUE:
    SERVICE_CONTROL_INTERROGATE:
    SERVICE_CONTROL_SHUTDOWN:
      begin
        if hStoppedEvent > 0 then SetEvent(hStoppedEvent);
      end;
  end;
end;

Versuch mal folgendes, um herauszufinden wo es genau hakt.

1. Testweise, ohne SERVICE_INTERACTIVE_PROCESS -> Reboot
2. Ohne das Aufräumen der Threads, bzw. gleich ohne diese überhaupt zu starten. -> Reboot


lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat