2011-02-16 8 views
4

저는 msbuild를 처음 사용하며 현재 원격 테스트 서버에 C# Windows 서비스를 배포 할 msbuild 스크립트를 만들려고합니다.MSBuild. Windows 서비스가 설치되어 있는지 확인하십시오.

이 목적으로 sc.exe 유틸리티를 사용하려고합니다. 그것에 대해 읽고 난 윈도우 서비스가 원격 서버에 설치되어 있는지 확인하는 방법을 찾지 못했습니다. 서비스가 설치되어있는 경우 서비스를 중지하고 필요한 파일을 업데이트해야합니다. 그렇지 않으면 서비스를 등록해야합니다.

P. 릴리스 빌드의 경우 WiX를 사용하여 MSI 패키지를 만들 계획입니다.

답변

9

MSBuild Comminity Tasks이 필요합니다. 최신 빌드에서는 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 작업이 닷넷 클래스 ServiceController 주변 단지 래퍼입니다. 작동 방식과 세부 구성 방법을 이해하는 데 필요한 설명서를 찾아보십시오.

두 번째 파트에는 설치 서비스가 포함됩니다. 그 목적을 위해 sc.exe 정장 very well.

+0

감사합니다. 질문이있다. 서비스 쿼리는 원격 컴퓨터 또는 로컬 서비스의 서비스 상태 만 확인할 수 있습니까? – lostaman

+0

기본 스크립트를 업데이트하고 지원되는 매개 변수 MachineName = "127.0.0.1"을 정의하여 서버에 연결합니다. –

0

전체 솔루션은 here으로 게시됩니다. 미래의 방문자를 도울 수 있습니다.

업데이트 : 다른 블로그 서비스가 중단됨에 따라 링크가 업데이트되었습니다.

+1

링크가 작동하지 않습니다. – Philter

+0

@Philter : 지적 해 주셔서 감사합니다. 클리너 URL로 전환 했으므로 끝에 더 이상 .html 확장자가 필요하지 않습니다. 지금 링크를 업데이트했습니다. – Mrchief

관련 문제