我正在建立一个建造机器人在 Azure 上运行的 Windows Server 2016 Datacenter Edition VM 中的工作人员。这将使用 Visual Studio C++ 编译器为 Windows 构建我们的产品。
我已经安装好工作器并在管理桌面会话中运行。它连接到我们的构建主服务器,并且似乎能够根据测试构建的结果访问所需的所有工具和服务。
我一直在努力让工作程序以服务形式运行。这样就可以自动以非特权用户身份运行工作程序。
只是……服务没有启动。当我查看事件日志时,我在“Windows 日志 → 系统”中看到两个错误:
事件 ID:7000
BuildBot 服务由于以下错误启动失败:该服务未及时响应启动或控制请求。
事件 ID:7009
等待 BuildBot 服务连接时超时(30000 毫秒)
BuildBot 本身没有在“Windows 日志 → 应用程序”中记录任何事件,并且在尝试启动时立即记录这些事件(并报告服务失败)。
目前,该服务设置为以“LocalSystem”运行(我计划稍后限制权限)。据我了解,“LocalSystem”应该可以访问所有本地资源,因此我认为文件系统权限不太可能导致此问题。
导致此类服务失败的常见原因有哪些?
还有其他我应该查看的日志或诊断信息吗?
我还可以采取哪些其他步骤来确定导致此失败的原因?
编辑:即使使用提供的简单测试服务,此问题也可以重现这个 Stack Overflow 上的答案。
答案1
问题原来是未注册的 DLL。具体来说,pywin32 提供的 Python 服务支持需要特定的 DLL 才能与 win32 API 交互。这些 DLL 应该在安装 pywin32 时自动安装:
pip install pypiwin32
正如所提到的这个 Stack Overflow 上的答案,在这种情况下正确的修复方法是运行:
python C:\Python27\Scripts\pywin32_postinstall.py install
这解决了我的问题。