通过 .CMD 文件启动服务有什么特殊要求吗?

通过 .CMD 文件启动服务有什么特殊要求吗?

我创建了一个.cmd启动 Python 脚本的文件。我想通过以下方式将其添加为 Windows 服务

C:\Windows\System32>sc create DNSResolver127 binPath= "D:/bin/32dsdnsproxy.cmd"
[SC] CreateService SUCCESS

该服务在面板中可见,Services但是当我尝试启动它时,事件日志中出现超时(2 个事件):

A timeout was reached (30000 milliseconds) while waiting for the DNSResolver127 service to connect.

The DNSResolver127 service failed to start due to the following error: 
The service did not respond to the start or control request in a timely fashion.

尽管超时了 30 秒,但尝试启动服务时仍立即出现错误。

它可以从CMD提示开始,没有任何问题。

.cmd作为服务启动时对文件有什么特殊要求吗?

答案1

有特殊要求一切当作为 Windows 服务启动时。

Windows 中的服务管理器为每个服务创建一个特殊的控制通道,通过该通道发送停止/暂停/恢复命令,服务本身必须通过该通道通知管理器它已“就绪”。如果您的 Python 脚本没有这样做,服务管理器将假定它启动失败并将被终止。

在使用 Python 编写服务时,可以使用win32servicePyWin32 中的相关模块:

注意:您不需要.cmd 脚本用于启动 Python 脚本 – binPath 可以直接引用 Python 解释器。

相关内容