Ich habe einen Windows-Dienst, der auf den meisten Servern einwandfrei funktioniert. Aber auf einem Server wird es vor dem Start der Netzwerkdienste gestartet. Dies führt dazu, dass die Dienste hängen bleiben und das Betriebssystem daher nicht hochfährt. Es bleibt auch stecken. Was ist die übliche Startreihenfolge von Dienstleistungen? Mein Windows-Dienst stellt TCP-Verbindungen her. Sollte ich einen verzögerten Start hinzufügen? Wenn dies der Fall ist, sollten nicht alle Dienste nach diesen Netzwerkdiensten einen verzögerten Start haben? Jede Hilfe wäre sehr dankbar.
7
Antworten:
Die Verwendung von verzögertem Start kann eine mögliche Lösung sein.
Eine andere Möglichkeit besteht darin, eine Abhängigkeit hinzuzufügen, damit die Dienste in der gewünschten Reihenfolge gestartet werden. Sie möchten beispielsweise nicht, dass Ihr Dienst beispielsweise vor dem NSI-Dienst gestartet wird, da die Netzwerkverbindung erst hergestellt werden kann, wenn der NSI-Dienst ausgeführt wird. Fügen Sie also eine Abhängigkeit hinzu.
Von MSDN :
(Weitere Informationen zur Startreihenfolge finden Sie auch in diesem MSDN-Artikel.)
Beides könnte funktionieren, aber wenn ich Sie wäre, wäre ich mehr daran interessiert herauszufinden, was an diesem einen Server anders ist. Es ist eine gute Idee, immer vollständig zu verstehen, was passiert und warum, bevor Sie die Systemeinstellungen ändern und diesen einen Server im Vergleich zu den anderen zu einer "besonderen Schneeflocke" machen.
Bearbeiten :
Sie haben mich dazu gebracht, mehr über die Frage nachzudenken: "Was ist die Startreihenfolge der Dienste in Windows?" Ich meine, die genaue Reihenfolge, und ich glaube nicht, dass die Frage jemals gründlich beantwortet wurde, zumindest nicht öffentlich.
Ich denke, das liegt teilweise daran, dass es sehr kompliziert ist. Die genaue Startreihenfolge der Windows-Dienste ändert sich ständig. Es gibt "Frühstartdienste", "Phase-1-Dienste", "Phase-2-Dienste", Dienstgruppen, Dienste, die gestartet werden, weil sie Abhängigkeiten sind usw. usw. Sie unterscheiden sich geringfügig bei jeder Version und Edition von Windows und variieren auch bei verschiedenen Konfigurationen und Bereitstellungsoptionen. Verlassen Sie sich also nicht darauf, dass es jemals offiziell in etwas anderem als den allgemeinsten, relativen Begriffen dokumentiert wird, z. B. "Startverzögerungsdienste starten nach den Autostartdiensten".
Ich denke, das liegt auch teilweise daran, dass es sich um eine nicht deterministische Situation handelt. Der Service Control Manager (services.exe im Benutzermodus) sendet das Startsignal an einen Dienst, und die Reihenfolge dieses Teils ist ziemlich deterministisch, aber der Zeitpunkt, zu dem das Startsignal gesendet wird, und der Zeitpunkt, zu dem der Dienst tatsächlich gestartet wird, sind zwei verschiedene Dinge. Aufgrund des präventiven Charakters von Windows können wir nicht immer garantieren, dass Dienst A vor Dienst B gestartet wird, selbst wenn der SCM Dienst A zuerst die Startsteuerung gesendet hat. (Es sei denn, wir verwenden einen Synchronisationsmechanismus.)
Wie auch immer, ich dachte, ich könnte zumindest einige SCM-Protokollierungen während des Startvorgangs aktivieren und sehen, wie der SCM alle Dienste chronologisch startet.
Dies ist Windows 10, RS1 / 1607. Wie ich bereits erwähnt habe, würden Ihre Ergebnisse bei praktisch jedem anderen Build geringfügig variieren. Die Ergebnisse wurden hinsichtlich Länge und Inhalt bearbeitet. Zunächst denke ich, dass es am interessantesten ist, die chronologische Reihenfolge anzuzeigen, in der die Dienste in den Betriebszustand versetzt wurden, nicht unbedingt die Reihenfolge, in der der SCM versucht hat, sie zu starten.
Als nächstes haben wir eine chronologische Liste der Windows-Dienste, an die der SCM Startsteuerungen gesendet hat. Beachten Sie, dass diese Liste kürzer ist. Und es kann nicht immer in der gleichen Reihenfolge sein.
quelle