如何确定运行命令时Windows服务(TeamCity构build代理)挂起的原因?

我有一个Windows服务的问题,我只是根本无法到达底部。 我想要做的是从作为Windows服务运行的TeamCity构build代理执行HP WebInspect 9.0应用程序。 最终目标是在应用程序发布到目标环境之后自动执行安全扫描。

我有一个命令,当我远程进入服务器时,从命令窗口中执行得非常好:

"C:\Program Files\HP\HP WebInspect\wi.exe" -u http://mysite.com -r "Vulnerability (Classic)" -y Standard -fc:\Temp\Report.pdf -gp -v 

此命令定期(每隔几分钟)向terminal返回详细输出,并在约13分钟(持续时间相当一致)后最终以PDF格式丢弃报告。 但是,一旦我从TeamCity运行它,我可以看到该命令出现在TeamCity服务器上的构build输出,但在此之后绝对没有。 即使8小时后,它只是挂起,我不知道为什么。

一些更多信息:

  1. TeamCity构build代理服务在我的身份下运行,所以它应该具有与从命令行手动执行相同的权限。
  2. 如果我将其中一个参数更改为无效,WebInspect将返回一个“无效参数”消息,所以我知道这肯定会被调用。
  3. 在任务pipe理器中观察进程,我可以看到WI.exe在我再次开始编译时启动,它肯定正在执行。
  4. 我没有得到任何使用的事件日志中的任何东西。
  5. 我无法从使用命令行生成的WebInspect中find任何日志(尽pipe可以从GUI中执行的扫描访问日志)。
  6. 除了详细输出设置之外,WebInspect命令行中没有别的东西可以提供更多的信息。

我的怀疑是,由于某种原因,它坐在那里等待投入,但我不知道为什么。 我假设在我的身份下运行一个命令的服务应该和我在login并执行相同命令时的行为一样 – 这个假设是错误的吗? 还有什么我可以看看尝试,并得到这个底部?

作为第一步,我build议将长命令行保存到batch file(例如LaunchWI.cmd)中,并从TeamCity构build代理调用该batch file。

从Windows服务启动应用程序时,当前工作目录将被设置为c:\ windows \ system32 – 这可能会导致一些问题。 尝试添加

C:

CD“\ Program Files \ HP \ HP WebInspect”

在启动webinspect之前进入您的batch file。