![通过 .CMD 文件启动服务有什么特殊要求吗?](https://linux22.com/image/1597208/%E9%80%9A%E8%BF%87%20.CMD%20%E6%96%87%E4%BB%B6%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E6%9C%89%E4%BB%80%E4%B9%88%E7%89%B9%E6%AE%8A%E8%A6%81%E6%B1%82%E5%90%97%EF%BC%9F.png)
我创建了一个.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 编写服务时,可以使用win32service
PyWin32 中的相关模块:
注意:您不需要.cmd 脚本用于启动 Python 脚本 – binPath 可以直接引用 Python 解释器。