Was sind die Ursachen von StartServiceCtrlDispatcher() fehl mit 1063 (ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)?

Ich seltsame Fehler mit meiner Windows-Dienst-Programm. Mein service-Programm nennt StartServiceCtrlDispatcher() am Anfang seiner main(), aber irgendwann schlägt mit 1063 (ERROR_FAILED_SERVICE_CONTROLLER_CONNECT).

Ich weiß, dass dieser Fehler tritt auf, wenn der Benutzer startet das Programm manuell (als console-Programm). Aber, es ist nicht der Fall. Ich habe eine code zu überprüfen, den übergeordneten Prozess des service-Programm, wenn dieser Fehler Auftritt, und es sagt services.exe ist der übergeordnete Prozess (ich denke, es ist sicher davon ausgehen, dass mein Programm richtig gestartet von SCM).

Leider diesen Fehler nicht reproduzieren, auf meiner dev Maschine und kann nicht Debuggen von mir, aber die Fehler-logs erfasst, die auf Systemen der Benutzer sagt:

  • Dieses problem scheint zu passieren, auf nur wenige % aller Nutzer dieses Programms.
  • Auch wenn das problem passiert, scheint es nicht zu wiederholen. Nächste mal, wenn der service beginnt in der Regel erfolgreich.
  • Wenn dieses problem passiert, StartServiceCtrlDispatcher() Stände für etwa eine Sekunde, bevor er zurück mit scheitern.

Hat jemand gesehen ähnlichen Fehler? Wenn ja, was war die Ursache für den Fehler?

Haben Sie überprüft, dass Sie den Aufruf von StartServiceCtrlDispatcher aus dem Haupt-thread, dass es aufgerufen wird, ist innerhalb von ein paar Sekunden den Vorgang ab, und die SERVICE_ENTRY_TABLE array ist korrekt? (Insbesondere, stellen Sie sicher, dass der Letzte Eintrag ist {NULL, NULL}.)
Ja, SERVICE_ENTRY_TABLE ist ordnungsgemäß beendet.Und über das timing, den ich vergaß zu erwähnen in meiner ursprünglichen Frage, aber nach StartServiceCtrlDispatcher() Fehler, mein code überprüft Zeitstempel und meist ist es über eine Sekunde (oder weniger) nach der service-Prozess gestartet. Also, ich denke, es ist unwahrscheinlich, dass die Verzögerung, den Fehler verursacht.
Sehr seltsam. Und sehr schwer zu Debuggen, wenn Sie nicht identifizieren können, einen gemeinsamen Faktor, so dass Sie das problem reproduzieren können. Als eine mögliche Lösung, vielleicht könnten Sie versuchen, den Aufruf von StartServiceCtrlDispatcher() ein zweites mal, wenn der erste Aufruf fehlschlägt?

InformationsquelleAutor Susumu Arai | 2015-05-26

Schreibe einen Kommentar