2009-01-14 17 views
5

Ich habe einen Windows-Dienst mit installutil installiert und auf "Autostart" gesetzt. Mein Problem ist, dass wenn einige Server neu gestartet werden, es versucht zu starten, bevor "Microsoft SQL-Dienst" gestartet wurde - ich kann dies sehen, indem ich auf das Ereignisprotokoll während eines Systemneustarts schaue. Was ist der beste Weg, um meinen Dienst "Auto Start" NACH dem Sql-Server-Dienst gestartet hat?Steuerung der Startsequenz eines Windows-Dienstes

Ich spiele mit der Idee, eine SQL-Job-Set zu erstellen, um zu starten, wenn "SQL Server-Agent" startet, dass wiederum den Windows-Dienst startet. Aber hoffentlich gibt es eine einfache, effektive Möglichkeit, die Reihenfolge zu steuern, in der automatische Dienste gestartet werden.

Antwort

5

Jeder Windows-Dienst hat eine Liste von anderen Diensten es hängt davon ab. Das bedeutet, dass es wartet, bis seine Abhängigkeiten gestartet wurden, bevor es zu starten beginnt, und es wird sie für Sie starten, wenn sie nicht automatisch gestartet wurden, wenn Sie gestartet werden.

Wenn Sie Ihren Windows-Dienst in .NET erstellen, gibt es eine Blog-Post hier die hilfreich sein könnte:

How to: Code Service Dependencies

Andernfalls wird ein Microsoft kb-Eintrag gibt es hier, die eine Art und Weise Service-Abhängigkeiten hinzufügen Details über die Registry:

How to delay loading of specific services

+0

Vielen Dank. Das hat super funktioniert. Ich habe die Installer-Klasse hinzugefügt - bin zu Eigenschaften gegangen und habe eine Abhängigkeit zum "MSSQLSERVER" -Dienst hinzugefügt. Scheint zu arbeiten. Ich frage mich, ob der Dienstname für SQL Server 2005, 2008 gleich bleibt. – Bijimon

+0

Was passiert, wenn der Benutzer SQL Server auf einem zentralisierten Failovercluster oder nur einem anderen Feld ausführen möchte? – onupdatecascade

+0

@ Matthathilton der obere Link ist gebrochen –

2

Sie können Abhängigkeiten zwischen den Diensten festlegen.

See here:

2

Wenn Sie dies mit einer Batch-Skript tun wollen, dann wird die folgende helfen

REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\%ServiceKey%" /v "DependOnService" /t REG_MULTI_SZ /d "Service Number 01\0Service Number 02"

Dies verwendet reg.exesee here

2

Abhängigkeiten verlockend sind, aber im Fall von SQL Server kann auf längere Sicht Design Ihres Systems schädlich sein. Überlegen Sie, ob Ihre App erfolgreich sein wird und Ihre Kunden auf einen anderen SQL-Server in einer anderen Box oder in einen Failover-Cluster wechseln möchten.

Ein besseres Design könnte sein, einige Wiederholungs/Timeout-Logik in den Start Ihres Dienstes zu setzen, so dass es versuchen wird, den SQL Server (vielleicht sogar auf einem anderen Computer) zu kontaktieren, warten, versuchen und dann ordnungsgemäß fehlschlagen.

Verwandte Themen