CruiseControl.NET作为Windows服务运行,并且作为独立进程的行为有所不同

时间:2010-05-10 12:33:38

标签: unit-testing windows-services cruisecontrol.net .net-remoting

我有一个使用CruiseControl.NET构建的项目。该项目包含一个“MSBuild任务”,它运行项目的构建以及单元测试。反过来,单元测试只是一个运行可执行文件的MSBuild'exec'任务。

单元测试涉及一些.NET远程处理。当单元测试通过系统命令提示符运行时,软件的窗口打开,测试运行并退出流程。

当我通过Web仪表板强制构建时,构建会在单元测试开始运行时挂起。软件的窗口无法打开,但可执行文件正在运行。如果通过任务资源管理器终止进程,则构建将以“失败”状态进行。当我将ccnet作为Windows服务运行时会发生这种情况。

如果我直接运行CCNet(不是作为Windows服务)并通过Web仪表板强制构建,则构建和单元测试按预期正常运行。 (随着软件的窗口打开。)

在CCNet作为Windows服务运行的情况下,似乎存在死锁。我猜它与标准输出/错误流有关。

  1. 这是已知问题吗?

  2. 可能会出现什么问题?

  3. 有关调试的建议吗?

  4. 我怎样才能绕过它?

  5. (我正在使用CCNet版本1.4.4 SP1)

2 个答案:

答案 0 :(得分:1)

当CCNet作为服务运行时,它无法访问显示器,所以不要指望在此配置中屏幕上看到任何内容。我要检查的第一件事是权限 - 确保该服务作为一个帐户运行,该帐户有权访问您需要的任何资源。您还有CCNet日志文件,您可以通过仪表板找到它们。

另一方面,尝试使用TeamCity而不是CCNet,这是它提前10年。

答案 1 :(得分:0)

也许这个答案会有所帮助: delphi windows service can't download file from internet

您应该知道,当将CCNet作为应用程序(dosbox)运行时,它会使用环境变量和所有权利来自已记录的帐户。因此它可以连接到服务器,使用缓存密码,获取此帐户的注册表变量。

但是当作为服务运行时,该帐户就是您提供的帐户:例如LocalSystem,例如env。 varibales不一样。

因此,您可以做的是更改CCNet服务帐户以进行测试。将其更改为您的用户帐户(使用密码),我相信它会更好用!