Итак, мы создали службу Windows для подачи данных в наше клиентское приложение, и все идет отлично. Клиент придумал забавный запрос конфигурации, который требует двух экземпляров этой службы, работающих на одном сервере, и настроен для указания на отдельные базы данных.
До сих пор мне не удалось это сделать, и я надеялся, что мои коллеги-участники stackoverflow могут дать некоторые подсказки о том, почему.
Текущая настройка:
Я создал проект, содержащий службу Windows, с этого момента мы будем называть его AppService и файл ProjectInstaller.cs, который обрабатывает пользовательские шаги установки, чтобы установить имя службы на основе ключа в приложении. 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 (только для соответствующих частей):
Запуск транзакционной установки.
Начало этапа установки.
Установка службы обслуживания приложений... Служба обслуживания приложений. 2 успешно установлена. Создание источника EventLog для службы приложений Два в приложении журнала...
Исключение произошло на этапе установки. System.NullReferenceException: ссылка на объект не установлена в экземпляр объекта.
Начало этапа отката установки.
Восстановление журнала событий в предыдущем состоянии для источника службы приложений Two. Служба обслуживания приложений Два из них удаляются из системы... Служба обслуживания приложений Два успешно удалены из системы.
Этап отката успешно завершен.
Транзактная установка завершена. Установка завершилась неудачно, и откат был выполнен.
Извините за длинный пост, хотел удостовериться, что есть достаточная релевантная информация. Часть, которая до сих пор меня озадачила, заключается в том, что она заявляет, что установка службы завершается успешно, и ее только после того, как она идет, чтобы создать источник EventLog, который, как представляется, вызывает NullReferenceException. Поэтому, если кто-то знает, что я делаю неправильно или у меня есть лучший подход, мы будем очень благодарны.