为什么我的Windows BuildBot服务在出现错误7000时立即失败?

我在Azure上运行的Windows Server 2016 Datacenter Edition VM中设置BuildBot worker。 这将使用Visual Studio C ++编译器构build我们的Windows产品。

我已经到了在pipe理桌面会话中安装和运行worker的地步。 它连接到我们的构build主服务器,似乎能够根据testing版本的结果访问所需的所有工具和服务。

我一直在努力让工人作为一项服务来运作。 这将使自动运行worker成为非特权用户成为可能。

除了…服务没有启动。 当我查看事件日志时,在“Windows日志→系统”中看到两个错误:

  • 事件ID:7000

    由于以下错误,BuildBot服务无法启动:服务没有及时响应启动或控制请求。

  • 事件ID:7009

    在等待BuildBot服务连接时达到了超时(30000毫秒)

BuildBot本身没有login“Windows日志→应用程序”的事件,并且在尝试启动时立即logging这些事件(并且服务报告为失败)。

目前,该服务设置为“本地系统”(我打算稍后限制权限)运行。 据我所知,“LocalSystem”应该可以访问所有本地资源,所以我不认为文件系统权限可能会导致这个问题。

  • 有没有经常遇到这样的服务失败的原因?

  • 还有我应该看的其他日志或诊断信息吗?

  • 我可以采取哪些其他措施来确定导致此故障的原因?

编辑:即使使用此堆栈溢出答案中提供的简单testing服务,此问题是可重现的。

问题原来是未注册的DLL。 具体来说,pywin32提供的Python服务支持需要特定的DLL才能与win32 API交互。 安装pywin32时应该自动安装这些DLL:

pip install pypiwin32 

正如在这个堆栈溢出答案中提到的,在这种情况下正确的修复是运行:

 python C:\Python27\Scripts\pywin32_postinstall.py install 

这解决了我的问题。