如何修复Windows服务启动时出现的Error 1053错误?
解决Windows服务启动Error 1053问题
你的问题根源在于:普通控制台程序不能直接作为Windows服务运行。Windows服务需要遵循特定协议,必须在启动后快速向Windows服务控制管理器(SCM)发送响应,且服务运行在无交互的会话环境中,print、input这类依赖控制台的代码完全不适用。
修正方案
1. 重写符合服务规范的Python脚本
先安装pywin32库:
pip install pywin32
替换原脚本为以下服务专用代码:
import win32serviceutil import win32service import win32event import servicemanager import sys class HelloWorldService(win32serviceutil.ServiceFramework): _svc_name_ = "Hello" _svc_display_name_ = "Hello World Service" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, '')) # 业务逻辑示例:输出日志到Windows事件查看器 servicemanager.LogInfoMsg("Hello World!") # 等待停止信号,保持服务运行状态 win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) if __name__ == '__main__': if len(sys.argv) == 1: servicemanager.Initialize() servicemanager.PrepareToHostSingle(HelloWorldService) servicemanager.StartServiceCtrlDispatcher() else: win32serviceutil.HandleCommandLine(HelloWorldService)
2. 重新打包为可执行文件
用pyinstaller打包时,可指定无控制台窗口(服务不需要控制台):
pyinstaller --onefile --noconsole hello_service.py
3. 注册并启动服务
以管理员身份打开命令提示符:
- 注册服务:
hello_service.exe install
- 启动服务:
net start Hello
- 查看服务输出:打开事件查看器 → 应用程序和服务日志 → Python,即可看到"Hello World!"的日志记录。
原脚本失效的核心原因
- 原脚本用
input等待用户按键,服务运行在无交互会话中无法响应,且未向SCM发送启动成功信号,超时后触发1053错误。 - 修改注册表超时时间只是治标,核心是程序不符合Windows服务的运行逻辑。
内容的提问来源于stack exchange,提问作者Benymoh
相关产品推荐
相关产品推荐

