2009-12-01 32 views
5

有没有办法在Cruise Control .NET内部进行fork进程?我希望CC .NET在一切都完成时启动一个程序,但是现在,CC .NET坚持在程序完成之前等待程序关闭。用CC .NET进行叉进程

启动的程序一次最多可运行数周。

回答

5

我会这样做的方式是使用PowerShell或批处理脚本。该脚本可以启动您的进程并在产生可执行文件后正常返回到CC.NET。这是我看到做这件事的唯一方式,因为CC.NET确实需要知道它返回并且脚本可以返回,即使您生成的进程仍然在运行。一个示例PowerShell脚本,可以做你想做的事情。然后,您只需以exerate的路径作为参数调用powershell脚本即可。

param( [string] $exePath = $(throw "A path to executable required.") 
    ) 

Invoke-Item $exePath 

这里CC.NET 1.5将如何设置PowerShell的任务

<powershell> 
    <script>yourScriptName.ps1</script> 
    <scriptsDirectory>D:\CruiseControl</scriptsDirectory> 
    <buildArgs>full path to exe you want to kick-off</buildArgs>  
</powershell> 
1

将该程序的启动放入一个单独的CCNET项目中,并将ForceBuildPublisher添加到原始项目中。

<project name="OriginalProject"> 
    <!-- ... --> 
    <publishers> 
    <!-- ... --> 
    <forcebuild> 
     <project>LaunchProgram</project> 
    </forcebuild> 
    </publishers> 
</project> 
+0

不幸的是,CC .NET超时并在一段时间后终止了这个过程。 – 2009-12-03 00:01:29

2

这个怎么样?2的小程序

1)运行所有的处理时间(也许是一个Windows服务?),并在TCP套接字上侦听,当它获得连接时,执行你的3周过程。

2)一个进程可以被CC.NET调用,并打开一个tcp连接来处理#1,然后退出。

您可以使用任何形式的进程间通信,但TCP套接字很容易且可靠。

0

我还没有尝试使用PowerShell(选定的答案)的解决方案,但我使用红宝石耙和任何我试图分叉独立进程组与Ruby库,CruiseControl STILL INSIST等待异步过程完成。

对我而言;只有这样,才能与CCNET成功叉独立的守护进程/服务器应用程序使用任务调度器(https://stackoverflow.com/a/14679992/423356

所以使用SchTasks.exe会创造一次任务暴殄天物运行开始你的过程

你可以调用的schtasks和动态使用批处理文件,ruby rake或PowerShell设置开始时间。