Installieren mehrerer Instanzen desselben Windows-Dienstes auf einem Server

Deshalb haben wir einen Windows-Dienst erstellt, der Daten an unsere Client-Anwendung weiterleitet, und alles läuft großartig. Der Client hat eine unterhaltsame Konfigurationsanforderung erstellt, für die zwei Instanzen dieses Dienstes auf demselben Server ausgeführt und so konfiguriert werden müssen, dass sie auf separate Datenbanken verweisen.

Bisher war ich nicht in der Lage, dies zu erreichen, und ich hoffte, dass meine Stackoverflow-Kollegen einige Hinweise geben könnten, warum.

Aktuelles Setup:

Ich habe das Projekt eingerichtet, das den Windows-Dienst enthält, wir nennen es ab sofort AppService und die Datei ProjectInstaller.cs, die benutzerdefinierte Installationsschritte verarbeitet, um den Dienstnamen basierend auf einem Schlüssel in der App.config wie folgt festzulegen :

this.serviceInstaller1.ServiceName = Util.ServiceName;
this.serviceInstaller1.DisplayName = Util.ServiceName;
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

In diesem Fall ist Util nur eine statische Klasse, die den Dienstnamen aus der Konfigurationsdatei lädt.

Von nun an habe ich zwei verschiedene Methoden ausprobiert, um beide Dienste zu installieren, und beide sind auf identische Weise fehlgeschlagen.

Die erste Möglichkeit bestand darin, einfach die erste Kopie des Dienstes zu installieren, das installierte Verzeichnis zu kopieren und umzubenennen und dann nach dem Ändern der App-Konfiguration den folgenden Befehl auszuführen, um den gewünschten Dienstnamen zu ändern:

InstallUtil.exe /i AppService.exe

Als das nicht funktionierte, habe ich versucht, ein zweites Installationsprojekt zu erstellen, die Konfigurationsdatei bearbeitet und das zweite Installationsprogramm erstellt. Als ich das Installationsprogramm ausführte, funktionierte es einwandfrei, aber der Dienst wurde nicht in services.msc angezeigt, sodass ich den vorherigen Befehl für die zweite installierte Codebasis ausführte.

Beide Male habe ich die folgende Ausgabe von InstallUtil erhalten (nur relevante Teile):

Ausführen einer abgeschlossenen Installation.

Beginn der Installationsphase der Installation.

Service App Service Two wird installiert ... Service App Service Two wurde erfolgreich installiert. Erstellen des EventLog-Quell-App-Service Zwei in der Protokollanwendung ...

Während der Installationsphase ist eine Ausnahme aufgetreten. System.NullReferenceException: Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt.

Die Rollback-Phase der Installation beginnt.

Wiederherstellen des Ereignisprotokolls auf den vorherigen Status für den Quell-App-Service Zwei. Service App Service Two wird aus dem System entfernt ... Service App Service Two wurde erfolgreich aus dem System entfernt.

Die Rollback-Phase wurde erfolgreich abgeschlossen.

Die durchgeführte Installation ist abgeschlossen. Die Installation ist fehlgeschlagen und das Rollback wurde durchgeführt.

Entschuldigung für den langwierigen Beitrag, wollte sicherstellen, dass es genügend relevante Informationen gibt. Was mich bisher stutzig gemacht hat, ist die Aussage, dass die Installation des Dienstes erfolgreich abgeschlossen wurde und erst, nachdem die EventLog-Quelle erstellt wurde, die NullReferenceException ausgelöst zu werden scheint. Wenn also jemand weiß, was ich falsch mache oder einen besseren Ansatz hat, wäre er sehr dankbar.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage