Установка нескольких экземпляров одной и той же службы Windows на сервере

Поэтому мы создали службу Windows для передачи данных в наше клиентское приложение, и все идет отлично. Клиент пришел с забавным запросом конфигурации, который требует, чтобы два экземпляра этой службы работали на одном и том же сервере и были настроены для указания на отдельные базы данных.

До сих пор я не смог этого добиться и надеялся, что мои коллеги-члены stackoverflow смогут дать некоторые подсказки относительно того, почему.

Текущая настройка:

Я настроил проект, который содержит службу Windows, теперь мы будем называть его AppService и файлом ProjectInstaller.cs, который обрабатывает пользовательские шаги установки для установки имени службы на основе ключа в файле App.config, например, так: :

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

В этом случае Util - это просто статический класс, который загружает имя службы из файла конфигурации.

Начиная с этого момента, я попробовал два разных способа установить обе службы, и обе оказались одинаковыми.

Первый способ состоял в том, чтобы просто установить первую копию службы, скопировать установленный каталог и переименовать его, а затем выполнить следующую команду после изменения конфигурации приложения, чтобы изменить имя нужной службы:

InstallUtil.exe /i AppService.exe

Когда это не сработало, я попытался создать второй проект установщика, отредактировал файл конфигурации и собрал второй установщик. Когда я запустил установщик, он работал нормально, но служба не обнаруживалась в services.msc, поэтому я выполнил предыдущую команду для второй установленной базы кода.

Оба раза я получал следующий вывод от InstallUtil (только соответствующие части):

Running a transacted installation.

Beginning the Install phase of the installation.

Installing service App Service Two... Service App Service Two has been successfully installed. Creating EventLog source App Service Two in log Application...

An exception occurred during the Install phase. System.NullReferenceException: Object reference not set to an instance of an object.

The Rollback phase of the installation is beginning.

Restoring event log to previous state for source App Service Two. Service App Service Two is being removed from the system... Service App Service Two was successfully removed from the system.

The Rollback phase completed successfully.

The transacted install has completed. The installation failed, and the rollback has been performed.

Извините за длинный переулок, хотел убедиться, что достаточно актуальной информации. Часть, которая до сих пор меня озадачила, состоит в том, что в ней говорится, что установка службы завершается успешно, и только после того, как она отправляется на создание источника EventLog, похоже, что исключение NullReferenceException возникает. Поэтому, если кто-то знает, что я делаю неправильно или у него есть лучший подход, это будет очень цениться.

Ответы на вопрос(10)

Ваш ответ на вопрос