2011-02-16 8 views
4

私はmsbuildを初めて使用しています。現在、リモートテストサーバーにC#Windowsサービスを展開するmsbuildスクリプトを作成しようとしています。MSBuild。 Windowsサービスがインストールされていることを確認してください

私はこの目的でsc.exeユーティリティを使用することを考えています。それについて読むと、Windowsサービスがリモートサーバーにインストールされているかどうかを確認する方法が見つかりませんでした。サービスがインストールされている場合、私はそれを停止し、必要なファイルを更新する必要があります。そうでなければ、サービスを登録する必要があります。

P.S.リリースビルドでは、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タスクは、.NETクラスServiceController単なるラッパーです。どのように動作するのか、どのように詳細に設定するのかを理解するためのドキュメントをご覧ください。

2番目の部分にはサービスのインストールが含まれます。そのためにsc.exeスーツvery well

+0

ありがとうございました。質問があります。サービスクエリは、リモートマシンまたはローカルサービス上のサービスのステータスのみをチェックできますか? – lostaman

+0

私はデフォルトのスクリプトを更新し、サポートされているパラメータMachineName = "127.0.0.1"を定義してサーバーに接続しました。 –

0

完全な解決策はhereです。将来の訪問者を助けるかもしれない。

更新:他のブログサービスがダウンしたときにリンクが更新されました。

+1

あなたのリンクは死んでいます。 – Philter

+0

@Philter:指摘してくれてありがとう。私はクリーナーURLに切り替えたので、もはや最後に.html拡張子は必要ありません。今すぐ更新されたリンク。 – Mrchief

関連する問題