2010-09-15 25 views
12

Mein automatisch startender Windows-Dienst kann nur beim Neustart nicht gestartet werden. Ich habe einen Windows-Dienst in C# erstellt und über ein von Wix erstelltes Installationsprogramm installiert. Der Dienst ist so eingerichtet, dass er automatisch startet. Der Dienst ist installiert und wird unter NT AUTHORITY \ NETWORK SERVICE ausgeführt. Wenn der Dienst gestartet wird, führt er zuerst einen externen Webservice-Aufruf aus.Windows-Dienst wird nach dem Neustart nicht automatisch gestartet

In Windows 7 kann ich den Dienst auf automatisch setzen - Verzögerter Start und der Dienst wird beim Neustart kein Problem starten. Allerdings ist diese Option nicht in Windows XP verfügbar, und wenn automatischem Start gesetzt, schlägt der Dienst aufgrund

A timeout was reached (30000 milliseconds) while waiting for the MyService service to connect.

Wenn ich versuche, manuell nach dem Anmeldevorgang zu starten, wird der Dienst startet in Ordnung, es ist Nur wenn der Dienst versucht, beim Neustart automatisch zu starten, gibt es ein Problem, das mich zu der Annahme verleitet, dass es Dependency-Dienste gibt, die ich meinem Dienst hinzufügen muss, damit er korrekt startet.

Kann mir jemand auf die richtigen Abhängigkeiten oder einen alternativen Ansatz hinweisen?

Antwort

11

Sie haben wahrscheinlich eine Race Condition mit einer Abhängigkeit. Sie könnten dies möglicherweise umgehen, indem Sie Ihren Dienst so konfigurieren, dass er von einem anderen Dienst abhängig ist (zB tcp/ip), aber ich würde Ihren Dienst so umschreiben, dass dieser Aufruf während des kritischen Ausführungspfades des Startvorgangs nicht erforderlich ist. Es sollte stattdessen in regelmäßigen Abständen versuchen, den Webservice-Aufruf zu einem späteren Zeitpunkt durchzuführen und nützliche Nachrichten zu protokollieren oder Nachrichten an ein Taskleisten-Dienstprogramm oder ähnliches zu senden, wenn ein Problem vorliegt, das behoben werden muss.

+0

Ich habe über beides nachgedacht. Problem ist, dass der Anruf zum Abrufen von Remote-Konfigurationseinstellungen erfolgt und als solcher in den Einstellungen als Erweiterung von SettingsProvider integriert ist. –

+1

Sorry, aber es muss getan werden. Das grundlegende Design ist bestenfalls zerbrechlich. Web ist staatenlos und davon auszugehen, dass alles andere falsch ist. –

+1

Ich nahm Ihren Rat und machte meine OnStart() - Methode die Mindestfunktionalität und starten Sie einen Timer, der später ausführt, um die Konfigurationseinstellungen herunterzuziehen und die Service-Funktionalität zu initialisieren. –

0

Ich hatte das gleiche Problem auf 4 neuen Servern. Ich habe den W32-Dienst auf automatische Verzögerung eingestellt und das Problem wurde behoben.

Verwandte Themen