4

msbuild は初めてで、現在、C# Windows サービスをリモート テスト サーバーにデプロイする msbuild スクリプトを作成しようとしています。

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

PS リリース ビルドでは、WiX を使用して MSI パッケージを作成する予定です。

4

2 に答える 2

9

MSBuild コミュニティ タスクが必要です。最新のビルドでは、 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非常に適しています。

于 2011-02-17T09:52:35.680 に答える
0

完全なソリューションはここに掲載されています。将来の訪問者を助けるかもしれません。

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

于 2013-02-08T04:35:38.830 に答える