nant与msbuild:停止服务

jco*_*lum 4 msbuild nant build-process

我正试图决定我在MsBuild与Nant战争中的哪一方.我开始:停止服务,部署一些文件,重新启动服务.只是从查看这两个链接,在Nant中更容易做到.

MSBuild:Microsoft.Sdc.Tasks中使用Service Exists MSBuild任务的示例?

<target name="service_exists"> 
        <script language="C#"> 
                <references> 
                        <include name="System.ServiceProcess.dll" /> 
                </references> 
                <code><![CDATA[ 
                        public static void ScriptMain(Project project) { 
                                String serviceName = project.Properties["service.name"]; 
                                project.Properties["service.exists"] = "false"; 
                                project.Properties["service.running"] = "false"; 

                                System.ServiceProcess.ServiceController[] scServices; 
                                scServices = System.ServiceProcess.ServiceController.GetServices(); 

                                foreach (System.ServiceProcess.ServiceController scTemp in scServices) 
                                { 
         etc... 
Run Code Online (Sandbox Code Playgroud)

Nant:http: //ryepup.unwashedmeme.com/blog/2007/01/04/restart-a-windows-service-remotely/

<!-- Send the stop request -->
<exec program="sc.exe">
  <arg line="\\server stop shibd_Default"/>
</exec>
<!-- Sleep a little bit, to give the service a chance to stop -->
<sleep seconds="5"/>
<!-- Send the start request -->
<exec program="sc.exe">
  <arg line="\\server start shibd_Default"/>
</exec>
Run Code Online (Sandbox Code Playgroud)

我想知道SO社区是否同意我的看法.在Nant中完成这样的基本操作会更容易吗?当然看起来那样.CDATA块中的C#代码?WTF?

我们当前的构建过程是a)许多蝙蝠文件b)大量的诅咒.我真的很想找到一个好的替代品,但MsBuild的东西看起来像是一个痛苦的世界.我想要的方法是在Nant中构建脚本,然后使用MsBuild来完成需要完成的任何.NET构建.

一个重要问题:在脚本运行之前哪个更好地捕获脚本中的错误?我想在这里滚动自己,这是非常重要的一部分:排列所有数据并确保在尝试运行之前有意义.

moc*_*ect 8

在msbuild中,您还可以使用msbuild社区任务中打包的ServiceController 任务.


Der*_*ger 7

您可以sc.exe轻松地使用MSBuild 执行每一位...

<Exec Command="sc.exe \\server stop shibd_Default" />
Run Code Online (Sandbox Code Playgroud)

默认情况下,如果退出代码(of sc.exe)非零,则会"失败" ,但可以自定义.