Укажите имя службы Windows при установке с помощью проекта установки

Цель. В поддержку службы Windows, которая может иметь несколько экземпляров на одной машине, используйте проект установки для создания MSI, способного:

  • Получение пользовательского ввода для имени службы
  • Установка службы
  • Сериализация имени службы с 1 (чтобы имя пользователя можно было использовать при регистрации и удалении)

Моя первоначальная надежда состояла в том, чтобы установить Service Name в App.config(а затем извлечь его во время удаления при создании экземпляра ServiceInstaller. Это кажется наивным, потому что он недоступен во время установки.

Если MyInstaller расширяет Installer, он может вызвать base.Install(); однако мои попытки написать app.config(в MyInstaller.Install() и после base.Install()) неэффективны.

Таким образом, пока служба может быть установлена ​​с помощью пользовательского имени службы, это имя не сериализуется, и установщик наиболее недоволен при удалении.

Как это сделать?

Ответы

Ответ 1

Вы можете указать параметры для действий установщика, чтобы собрать имя службы и передать ее в качестве параметра для действия. Затем в классе Installer вы можете переопределить Install() и получить доступ к нему через base.Context.Parameters. Это то, как вы получаете ценность. Получив это значение и используя его, вы поместите его в параметр stateSaver IDictionary, чтобы при переопределении Uninstall() вы могли узнать, какое значение было использовано при установке.