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

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

我遇到了 Windows 服务问题,但就是无法弄清楚原因。我尝试执行的是惠普 WebInspect9.0 应用程序来自作为 Windows 服务运行的 TeamCity 构建代理。最终目标是在应用程序发布到目标环境后自动执行安全扫描。

我有一个命令,当我远程进入服务器时,它可以从命令窗口完美执行:

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

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

更多信息:

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

我怀疑它出于某种原因一直在那里等待输入,但我不知道为什么。我假设以我的身份运行命令的服务应该表现得与我登录到该框并执行相同命令时相同 - 这个假设是错误的吗?我还可以查看其他内容以尝试彻底解决这个问题吗?

答案1

作为第一步,我建议将长命令行保存到批处理文件(例如 LaunchWI.cmd)中,然后从 TeamCity 构建代理调用该批处理文件。

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

C:

光盘“\Program Files\HP\HP WebInspect”

在启动 webinspect 之前将其放入批处理文件中。

相关内容