2009-03-13 7 views
1

Ich habe ein einzelnes Service-Installationsprogramm, das mehrere Dienste installiert. Das ist großartig, aber eine einzelne unbehandelte Ausnahme in einem einzelnen Dienst stoppt alle Dienste, die von diesem Installer installiert wurden.Mehrere Windows-Dienste, ein Installationsprogramm, Entfernen von Abhängigkeiten

Der Code für das Installationsprogramm sieht so etwas wie diese

ServiceBase[] ServicesToRun; 

ServicesToRun = new ServiceBase[] 
{ 
    new Service1() , 
    new Service2() , 
    ... 
}; 

ServiceBase.Run(ServicesToRun); 

Also, wenn der Dienst installiert ist ich mehr separaten Dienste in dem Windows-Service-Management-Fenster sehen kann, und jeder kann gestartet werden, gestoppt, angehalten, wieder unabhängig .

Wenn Sie jedoch eine unbehandelte Ausnahme erleiden, hören alle auf.

Im Idealfall würde nur der Dienst, der das Problem hatte, aufhören und die anderen Dienste würden ihren fröhlichen Weg fortsetzen.

Kann jemand einen Weg vorschlagen, dies zu tun, ohne ein wirklich separates Installer-Projekt für jeden Dienst zu erstellen?

+0

jeder Dienst läuft in einem eigenen Thread ttw. – mjallday

Antwort

1

Fügen Sie eine unabhängige Fehlerbehandlung pro Dienst auf der höchsten Ebene hinzu, damit nicht alle Dienste ausgeführt werden.

Sie können auch einen automatischen Dienstneustart hinzufügen, wenn der Fehler nicht kritisch ist. Stellen Sie sicher, dass Sie im Falle von Service-Shut-Downs und Neustarts von Fehlern eine Menge Logging hinzufügen.

+0

Ich möchte dies tun, aber wir verwenden den Windows Service Controller, um Skripte auszuführen und zu berichten, wann die Dienste abstürzen. aus diesem grund möchte ich die fehler "natürlich" auftreten lassen. Danke tho – mjallday

+0

Ich denke, dann bin ich ein bisschen verwirrt, ohne Fehlerbehandlung, wenn einer der Dienste bombardieren, wird die gesamte Versammlung bombardieren. –

+0

Ich bewerte Sie dann für den Kommentar. Wenn es nicht möglich ist, zu verhindern, dass die Assembly abbricht, wenn es eine Ausnahme gibt, dann muss ich wohl wirklich separate Dienste erstellen. Vielen Dank – mjallday

Verwandte Themen