MSBuild.Проверьте, установлена ​​ли служба Windows - PullRequest
4 голосов
/ 17 февраля 2011

Я новичок в msbuild, и в настоящее время я пытаюсь создать сценарий msbuild, который развернет мою службу Windows на C # на удаленном тестовом сервере.

Я думаю об использовании утилиты sc.exe для этой цели.Читая об этом, я не нашел способа проверить, установлена ​​ли служба Windows на удаленном сервере.Если служба установлена, то мне нужно остановить ее и обновить необходимые файлы, в противном случае мне нужно зарегистрировать службу.

PS Для выпуска версий я планирую использовать WiX для создания пакета MSI.

Ответы [ 2 ]

9 голосов
/ 17 февраля 2011

Вам нужно Задачи MSBuild Comminity .В последней сборке существует пример в MSBuild.Community.Tasks.v1.2.0.306 \ Source \ Services.proj .Это решит первую часть вашего вопроса:

<PropertyGroup>
    <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\bin\Debug</MSBuildCommunityTasksPath>
</PropertyGroup>

<Import Project="$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\MSBuild.Community.Tasks.Targets"/>

<Target Name="Test">
    <CallTarget Targets="DoesServiceExist" />
    <CallTarget Targets="GetServiceStatus" />
    <CallTarget Targets="ServiceControllerStuff" />
</Target>

<Target Name="DoesServiceExist">
    <ServiceQuery ServiceName="MSSQLServer123" MachineName="127.0.0.1" >
        <Output TaskParameter="Exists" PropertyName="Exists" />
        <Output TaskParameter="Status" PropertyName="ServiceStatus" />
    </ServiceQuery>
    <Message Text="MSSQLServer Service Exists: $(Exists) - Status: $(ServiceStatus)"/>
</Target>

<Target Name="GetServiceStatus">
    <ServiceQuery ServiceName="MSSQLServer" MachineName="127.0.0.1">
        <Output TaskParameter="Status" PropertyName="ResultStatus" />
    </ServiceQuery>
    <Message Text="MSSQLServer Service Status: $(ResultStatus)"/>
</Target>

<Target Name="ServiceControllerStuff">
    <ServiceController ServiceName="aspnet_state" MachineName="127.0.0.1" Action="Start" />
    <ServiceController ServiceName="aspnet_state" MachineName="127.0.0.1" Action="Stop" />
</Target>

Эти задачи MSBuild являются просто оболочкой .Net class ServiceController Посмотрите документацию, чтобы понять, как она работает и как ее можно детально настроить.

Вторая часть включает установку службы.Для этой цели sc.exe подходит очень хорошо .

0 голосов
/ 08 февраля 2013

Полное решение выложено здесь .Может помочь будущим посетителям.

Обновление : ссылка обновлена ​​по мере того, как другие службы блогов отключились.

...