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

Есть ли у NAnt возможность установить или удалить службу Windows, используя утилиту InstallUtil или что-то еще?


person Brian Mains    schedule 05.08.2010    source источник


Ответы (4)


Вы можете вызвать задачу Nant exec для вызова InstallUtil и передать параметры для простой установки или удаления службы

 <target name="install-service">
    <exec program="${framework::get-framework-directory('net-2.0')}\InstallUtil.exe">
      <arg value="-i" />
      <arg value="/name=V1" />
      <arg value="C:\Service\SomeService.exe" />      
    </exec>
  </target>
person caltuntas    schedule 05.08.2010
comment
вместо жесткой привязки к пути installutil.exe вы должны использовать функции nant, чтобы сначала получить путь к платформе: framework :: get-framework-directory ('net-2.0'): nant.sourceforge.net/release/latest/help / functions / - person Garo Yeriazarian; 06.08.2010

Нант или MSBuild? В чем проблема с простым запуском installutil самостоятельно - это то, что вы бы сделали в MSBuild. (Как правило, сборки не выполняют установку таких вещей, как правило, поскольку обычно ваша сборка должна работать на случайном сервере сборки).

Другой вариант, который исключает installutil, - это добавить возможность самостоятельной установки в вашу службу, как это (поищите больше, выполнив поиск self install windows service)

person Ruben Bartelink    schedule 05.08.2010
comment
NAnt, извините за путаницу с тегами. - person Brian Mains; 06.08.2010
comment
У меня более сложный процесс, который выполняется вне службы, поэтому я хотел бы использовать все с помощью NAnt. - person Brian Mains; 06.08.2010
comment
@Brian: Круто (я подписываюсь на тег msbuild - придерживаюсь тега автоматизации сборки. В целом installutil - неплохой подход (хотя проблемы с загрузкой, связанные с ним, определенно важно знать. - person Ruben Bartelink; 06.08.2010

Если ваш сервис может быть установлен в разных местах, вы также можете удалить его через его имя с помощью SC.EXE, как показано ниже:

<property name="serviceName" value="Name of the service"/>
<exec program="sc" failonerror="false" verbose="true" if="${service::is-installed(serviceName,'.')}">
 <arg value="delete"/>
 <arg value="${serviceName}"/>
</exec>
person jcmeyrignac    schedule 13.08.2010
comment
service :: is-installed required nant-contrib - nantcontrib .sourceforge.net / release / 0.85 / help / functions / - person Castrohenge; 17.07.2014

Если вы используете TopShelf Project в своем приложении для размещения своих служб, вы можете получить инструменты командной строки для установка / удаление служб без использования InstallUtil.

ServiceName.exe установка службы ServiceName.exe удаление службы

И вы можете запустить службу напрямую и получить красивое окно консоли, которое вы можете остановить с помощью CTRL + C. Вы можете интегрировать это непосредственно в nant или msbuild, выполнив программу.

person Garo Yeriazarian    schedule 05.08.2010
comment
У меня более сложный процесс, поэтому я использую NAnt для консолидации ... - person Brian Mains; 06.08.2010
comment
Если вам просто нужно что-то, что будет вызывать InstallUtil в ваших службах, я рекомендую ответить mcaaltuntas. Вы даже можете обернуть его ‹foreach› в nant, который будет перебирать все .exe или все службы и устанавливать все за вас. - person Garo Yeriazarian; 06.08.2010