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

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

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

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

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

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

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


person sympatric greg    schedule 01.07.2009    source источник


Ответы (1)


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

person Neil Barnwell    schedule 08.07.2009
comment
Вот отличный пример добавления пользовательских интерфейсов и передачи параметров: codeproject.com/KB /install/SetupAndDeployment.aspx , то вы можете дополнить этот пример этим ответом. - person lidermin; 04.07.2011