Есть ли у NAnt возможность установить или удалить службу Windows, используя утилиту InstallUtil или что-то еще?
Установить / удалить службу Windows в скрипте сборки с помощью NAnt
Ответы (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>
Нант или MSBuild? В чем проблема с простым запуском installutil самостоятельно - это то, что вы бы сделали в MSBuild. (Как правило, сборки не выполняют установку таких вещей, как правило, поскольку обычно ваша сборка должна работать на случайном сервере сборки).
Другой вариант, который исключает installutil, - это добавить возможность самостоятельной установки в вашу службу, как это (поищите больше, выполнив поиск self install windows service
)
Если ваш сервис может быть установлен в разных местах, вы также можете удалить его через его имя с помощью 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>
Если вы используете TopShelf Project в своем приложении для размещения своих служб, вы можете получить инструменты командной строки для установка / удаление служб без использования InstallUtil.
ServiceName.exe установка службы ServiceName.exe удаление службы
И вы можете запустить службу напрямую и получить красивое окно консоли, которое вы можете остановить с помощью CTRL + C. Вы можете интегрировать это непосредственно в nant или msbuild, выполнив программу.