Instalowanie wielu wystąpień tej samej usługi Windows na serwerze

Dlatego stworzyliśmy usługę Windows, która przesyła dane do naszej aplikacji klienckiej i wszystko idzie świetnie. Klient wymyślił zabawne żądanie konfiguracji, które wymaga dwóch instancji tej usługi uruchomionych na tym samym serwerze i skonfigurowanych do wskazywania oddzielnych baz danych.

Jak dotąd nie udało mi się tego zrobić i miałem nadzieję, że moi koledzy z zespołu stackoverflow będą w stanie podać kilka wskazówek, dlaczego.

Obecne ustawienia:

Skonfigurowałem projekt, który zawiera usługę Windows, od tej pory nazwiemy to AppService i plik ProjectInstaller.cs, który obsługuje niestandardowe kroki instalacji, aby ustawić nazwę usługi na podstawie klucza w App.config tak :

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

W tym przypadku Util jest tylko klasą statyczną, która ładuje nazwę usługi z pliku konfiguracyjnego.

Od tego momentu wypróbowałem dwa różne sposoby na zainstalowanie obu usług i oba zakończyły się niepowodzeniem w identyczny sposób.

Pierwszym sposobem było po prostu zainstalowanie pierwszej kopii usługi, skopiowanie zainstalowanego katalogu i zmiana jego nazwy, a następnie wykonanie następującej komendy po zmodyfikowaniu konfiguracji aplikacji, aby zmienić żądaną nazwę usługi:

InstallUtil.exe /i AppService.exe

Gdy to nie zadziałało, próbowałem utworzyć drugi projekt instalatora, edytowałem plik konfiguracyjny i zbudowałem drugi instalator. Kiedy uruchomiłem instalator, działało to dobrze, ale usługa nie pojawiła się w services.msc, więc uruchomiłem poprzednie polecenie w stosunku do drugiej zainstalowanej bazy kodu.

Za każdym razem otrzymałem następujące dane z InstallUtil (tylko odpowiednie części):

Uruchamianie instalacji transakcyjnej.

Rozpoczęcie fazy instalacji instalacji.

Instalowanie usługi Usługa aplikacji Dwa ... Usługa aplikacji Service Two została pomyślnie zainstalowana. Tworzenie źródłowego serwisu aplikacji EventLog Dwa w aplikacji dziennika ...

Wystąpił wyjątek podczas fazy instalacji. System.NullReferenceException: Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu.

Rozpoczyna się faza wycofywania instalacji.

Przywracanie dziennika zdarzeń do poprzedniego stanu dla źródłowej usługi aplikacji drugiej. Usługa App Service 2 jest usuwana z systemu ... Usługa App Service Two została pomyślnie usunięta z systemu.

Faza wycofywania zakończyła się pomyślnie.

Transakcja instalacji została zakończona. Instalacja nie powiodła się, a wycofanie zostało wykonane.

Przepraszamy za długi post, chciałem się upewnić, że jest wystarczająco dużo istotnych informacji. Kawałek, który do tej pory mnie zakłopotał, to stwierdzenie, że instalacja usługi zakończyła się pomyślnie i dopiero po utworzeniu źródła EventLog, które wydaje się wywoływać wyjątek NullReferenceException. Więc jeśli ktoś wie, co robię źle lub ma lepsze podejście, byłoby to bardzo mile widziane.

questionAnswers(10)

yourAnswerToTheQuestion