使用cc.net和MS Build安装Windows服务

时间:2012-10-28 01:42:04

标签: .net msbuild windows-services cruisecontrol.net

我正在使用cc.net和MS build来构建我的客户端和Win服务项目 这就是服务的构建方式,具体如下:
是否可以自动将其安装为Windows服务?

      <msbuild>
        <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>C:\CCBuild\Git\Dev\Services\ServiceSetup</workingDirectory>
        <projectFile>ServiceSetup.wixproj</projectFile>
        <buildArgs>/p:Configuration=Release /p:Platform=x86 /v:diag</buildArgs>
        <targets>Clean;Build</targets>
        <timeout>480</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
      </msbuild>  

和客户:
只有在安装并成功启动上述服务的情况下才可以运行集成测试吗?

      <msbuild>
        <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>C:\CCBuild\Git\Dev\LocalClient\ClientSetup</workingDirectory>
        <projectFile>ClientSetup.wixproj</projectFile>
        <buildArgs>/p:Configuration=Release /p:Platform=x86 /v:diag</buildArgs>
        <targets>Clean;Build</targets>
        <timeout>480</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
      </msbuild>
      <exec>
        <executable>C:\Program Files\Gallio\bin\Gallio.Echo.exe</executable>
        <buildArgs>/rnf:report2\test-report /rt:Xml-Inline /v:Quiet C:\CCBuild\Git\Dev\LocalClient\Client.IntegrationTests\bin\x86\Debug\Client.IntegrationTests.dll</buildArgs>
        <description>Client Tests</description>
      </exec>  

请解释一下示例代码,因为cc.net和MsBuild对我来说都是新手 谢谢

2 个答案:

答案 0 :(得分:3)

1:
我建议手动安装服务。 然后让巡航控制停止然后启动服务。 否则,您需要在尝试之前确定是否已安装该服务。

您可以添加一个exec任务,您可以调用net stop servicename来停止该服务。然后在msbuild之后再次启动它的另一个任务(使用net start servicename)。

net.exe是一个库存Windows控制台应用,因此它位于c:\windows\system32

2:
如果上述任务失败(即停止/构建/启动失败),则不会执行以下测试任务。

答案 1 :(得分:1)

要安装Windows服务,您可以使用命令行和Installutil或 - 如果您更喜欢它 - 您编写MSBuild脚本并使用WindowsService tasks from the MSBuild.ExtensionPack

如果将CCNET服务器配置为按顺序执行任务,则只有在前面的任务成功时才会执行Gallio任务。

<tasks>
  <!-- 1st... -->
  <msbuild>
    <!-- build server -->
  </msbuild>
  <!-- either... -->
  <exec>
    <!-- execute Installutil -->
    <executable>cmd.exe</executable>
    <buildArgs>/C C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe YourAssembly</buildArgs>
  </exec>
  <!-- or... -->
  <msbuild>
    <!-- execute WindowsService MSBuild script -->
  </msbuild>
  <!-- then... -->
  <msbuild>
    <!-- build client -->
  </msbuild>
  <!-- finally... -->
  <exec>
    <!-- execute Gallio -->
  </exec>
</tasks>

这是如何使用简单的Windows服务。关于服务设置WiX项目的输出,我有点不确定。如果它产生一些花哨的ServiceSetup.msi,包括ServiceInstall,那么你应该最好地了解哪些参数将被传递。