los*_*man 4 deployment msbuild windows-services remote-server
我是msbuild的新手,目前我正在尝试创建将我的C#windows服务部署到远程测试服务器的msbuild脚本.
我正在考虑使用sc.exe实用程序来实现此目的.阅读它我没有找到一种方法来检查Windows服务是否安装在远程服务器上.如果安装了该服务,那么我需要停止它并更新必要的文件,否则我需要注册该服务.
PS对于发布版本,我计划使用WiX创建MSI包.
您需要MSBuild Comminity Tasks.在最新的版本中存在一个例子MSBuild.Community.Tasks.v1.2.0.306 \来源\ 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>
Run Code Online (Sandbox Code Playgroud)
那些MSBuild任务只是.Net类ServiceController的包装器.查看文档以了解其工作原理以及如何详细配置它.
归档时间: |
|
查看次数: |
3166 次 |
最近记录: |