Windows-Dienste werden nach dem Neustart nicht automatisch gestartet?


10

Wir haben einige Windows-Dienste in .NET geschrieben. Sie werden innerhalb der Dienste mmc problemlos manuell gestartet, aber obwohl sie auf Automatisch eingestellt sind, werden sie beim Einschalten (oder Neustarten) des Computers nie gestartet.

Aktualisieren Im Ereignisprotokoll wird anstelle von "xyz gestartet" neben allen anderen startenden Diensten nur "Der xyz-Dienst wurde in den gestoppten Zustand versetzt" angezeigt. und ein separater Fehler mit der Meldung "Beim Warten auf eine Transaktionsantwort vom slsvc-Dienst wurde eine Zeitüberschreitung (30000 Millisekunden) erreicht."

Wenn ich sie manuell starte, erhalte ich wie erwartet einen normalen Eintrag im Ereignisprotokoll, und alles ist in Ordnung - bis zum nächsten Windows Update-Patch, der einen Neustart erzwingt und alle Dienste wieder deaktiviert.

Irgendwelche Ideen? Ich habe versucht, sie ohne erkennbaren Unterschied auf Verzögerten Start zu setzen.


Ich hatte einmal ein sehr ähnliches Problem mit einigen geplanten Aufgaben, die ich schließlich durch Ändern des Benutzernamens, den die Aufgabe ausgeführt hat, wie nach dem Erstellen, neu erstellen konnte. Ich stellte fest, dass ich das Problem leicht beheben konnte, indem ich die Aufgaben einfach löschte und neu erstellte. Es ist definitiv einen ähnlichen Ansatz wert - versuchen Sie, den Dienst zu entfernen und neu zu erstellen. Dies kann hilfreich sein, wenn Sie sich nicht sicher sind, wie Sie das tun sollen. Zu Ihrer Information, das Problem mit den geplanten Aufgaben tritt nicht mehr auf. Ich denke, ein Update hat es irgendwann behoben.
Dave Random

Ich frage mich, ob sie nicht starten können, weil sie von einem anderen Dienst abhängig sind (der noch nicht gestartet wurde). Können Sie einen Systemstartfehler im Systemprotokoll sehen?
Newmanth

@ DaveRandom Die Neuinstallation erfolgt tatsächlich jedes Mal, wenn wir eine neue Version bereitstellen. Es scheint also nicht, dass das Entfernen / Hinzufügen das Problem leider löst
James Crowley

@newmanth Frage mit einigen neuen Details aktualisiert - stellte sich heraus, dass es Ereignisprotokolleinträge gab, die ich verpasst hatte
James Crowley

In Ihrem Kommentar zu Robs Antwort ist mir aufgefallen, dass .NET die einzige Abhängigkeit ist. Wissen Sie, ob die Entwickler bei der Entwicklung des Dienstes APIs von Drittanbietern verwendet haben? Wenn ja, gibt es vielleicht einen Lizenzierungsmechanismus, der blockiert wird?
Newmanth

Antworten:


3

Dafür gibt es eine Lösung. Siehe: http://support.microsoft.com/kb/922918

Die Sache ist, dass ein Dienst möglicherweise ldap oder einen anderen Remotezugriff erfordert und aufgrund dessen Verzögerungen auftreten. Dies kann insbesondere beim Starten des Servers passieren. Durch Verlängern der Verzögerung können Sie sicherstellen, dass der Dienst gestartet wird.

Besser wäre es natürlich, zu beheben, warum der Start dieses Dienstes so lange dauert. Ist Ihre Umgebung nicht dimensioniert? Haben Sie Leistungsprobleme bei einem Dienst, der abgefragt wird, weil der Dienst verzögert gestartet wird?


Wie konkret können Service-Starts behoben werden? Gibt es eine Möglichkeit, die detaillierte Protokollierung zu aktivieren?
Kenny Evitt

1

Was meinst du mit "Wir haben einige Windows-Dienste"? Das deutet darauf hin, dass sie intern von jemandem in Ihrer Organisation erstellt wurden? Wenn ja, können Sie sie besser debuggen als alle anderen hier. Welche Abhängigkeiten haben diese Dienste von Windows-Komponenten? Werden Ihre Programmierer als Prüfer auf die Verfügbarkeit dieser Dienste angesehen und warten darauf, dass sie beim Start Ihrer Dienste online geschaltet werden? ?

Haben Sie darüber nachgedacht, diese Dienste als Abhängigkeit vom Softwarelizenzierungsdienst festzulegen (das ist slsvc )?

von http://support.microsoft.com/kb/193888

Um eine neue Abhängigkeit zu erstellen, wählen Sie den Unterschlüssel für den Dienst aus, den Sie verzögern möchten, klicken Sie auf Bearbeiten und dann auf Wert hinzufügen. Erstellen Sie einen neuen Wertnamen "DependOnService" (ohne Anführungszeichen) mit dem Datentyp REG_MULTI_SZ und klicken Sie dann auf OK. Wenn das Dialogfeld Daten angezeigt wird, geben Sie den Namen oder die Namen der Dienste ein, die Sie vor diesem Dienst mit einem Eintrag für jede Zeile starten möchten, und klicken Sie dann auf OK.

Der Name des Dienstes, den Sie im Dialogfeld Daten eingeben würden, ist der genaue Name des Dienstes, wie er in der Registrierung unter dem Schlüssel Dienste angezeigt wird.

Beim Starten des Computers wird anhand dieses Eintrags überprüft, ob der oder die in diesem Wert aufgeführten Dienste gestartet wurden, bevor versucht wird, den abhängigen Dienst zu starten.


Danke Rob - sie sind intern - aber die einzige Abhängigkeit ist das .NET Framework, von dem ich glaube, dass es nicht als Service ausgeführt wird. Es erfordert nichts anderes beim Start ...
James Crowley

0

Versuchen Sie es damit:

Führen Sie den folgenden Befehl aus, um ein Triggerereignis zu definieren, das zu Ihrer Umgebung passt. In diesem Beispiel bestimmt der Befehl, ob einem Host eine IP-Adresse zugewiesen wurde, und startet oder stoppt dann den Dienst.

sc triggerinfo w32time start / networkon stop / networkoff

Dabei ist w32Time Ihr Dienstname

oder versuchen Sie dies

https://support.microsoft.com/en-us/kb/922918

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.