views:

15

answers:

1

Hey,

I'm trying to figure out how to run a bat file that stops a windows service before the CruiseControl.NET project gets latest, as it'll fail saying the files are in use (by the running windows service.) I can't figure out how to run a task before it gets latest, as the source control block isn't a task, it's directly under the project node.

<project name="projectname" queue="queuename" queuePriority="1">
    <workingDirectory>C:\Build</workingDirectory>
    <category>companyname</category>
    <webURL>http://ip/ccnet/server/local/project/projectname/ViewProjectReport.aspx&lt;/webURL&gt;
    <triggers>
      <intervalTrigger seconds="60" />
    </triggers>
    <modificationDelaySeconds>60</modificationDelaySeconds>
    &sc;
    <tasks>
      <msbuild>
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
        <workingDirectory>C:\Build\Web\H4</workingDirectory>
        <projectFile>solution.sln</projectFile>
        <buildArgs>/v:quiet /noconlog /p:Configuration=Debug</buildArgs>
        <targets>Build</targets>
        <timeout>900</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\Rodemeyer.MsBuildToCCnet.dll</logger>
      </msbuild>
      <exec>
        <executable>deleteTestResults.bat</executable>
        <baseDirectory>C:\Build\Test\TestCases\H4Test</baseDirectory>
        <buildArgs></buildArgs>
        <buildTimeoutSeconds>30</buildTimeoutSeconds>
      </exec>
      <exec>
        <executable>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\mstest.exe</executable>
        <baseDirectory>C:\Build\Test\TestCases\</baseDirectory>
        <buildArgs>/testcontainer:testproject\bin\debug\testproject.dll /runconfig:localtestrun.Testrunconfig /resultsfile:H4Test\testResults.trx</buildArgs>
        <buildTimeoutSeconds>900</buildTimeoutSeconds>
      </exec>
    </tasks>
    <publishers>
      <merge>
        <files>
          <file>C:\Build\Test\TestCases\testproject\testResults.trx</file>
        </files>
      </merge>
      <xmllogger logDir="C:\Program Files\CruiseControl.NET\Logs\companyname\projectname\" />
    </publishers>
  </project>

Any help would be greatly appreciated, thanks, Justin

+1  A: 

Can't you just add a new exec before the msbuild task: i.e.

<tasks>     
    <exec>
        <executable>StopMyServices.bat</executable>
        <baseDirectory>C:\Build\Test\TestCases\H4Test</baseDirectory>
        <buildArgs></buildArgs>
        <buildTimeoutSeconds>30</buildTimeoutSeconds>
    </exec>
    <msbuild>
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
        <workingDirectory>C:\Build\Web\H4</workingDirectory>
        <projectFile>solution.sln</projectFile>
        <buildArgs>/v:quiet /noconlog /p:Configuration=Debug</buildArgs>
        <targets>Build</targets>
        <timeout>900</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\Rodemeyer.MsBuildToCCnet.dll</logger>
    </msbuild>
    <exec>
        <executable>deleteTestResults.bat</executable>
        <baseDirectory>C:\Build\Test\TestCases\H4Test</baseDirectory>
        <buildArgs></buildArgs>
        <buildTimeoutSeconds>30</buildTimeoutSeconds>
    </exec>
    <exec>
        <executable>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\mstest.exe</executable>
        <baseDirectory>C:\Build\Test\TestCases\</baseDirectory>
        <buildArgs>/testcontainer:testproject\bin\debug\testproject.dll /runconfig:localtestrun.Testrunconfig /resultsfile:H4Test\testResults.trx</buildArgs>
        <buildTimeoutSeconds>900</buildTimeoutSeconds>
    </exec>
</tasks>
DaveShaw
Doh.. I was thinking that when source control was pulled down, it would try to overwrite the running windows service files and error, but really those files (exe and dll's) aren't in source control anyway, they're only generated from the build, so your solution works fine. I was overthinking things, thanks.
Justin