You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本打包为Windows服务后启动失败(错误1053)的原因排查

Python脚本打包为Windows服务后启动失败(错误1053)的原因排查

我来帮你分析一下这个Windows服务启动失败(错误1053,服务未及时响应启动或控制请求)的可能原因,结合你的代码和操作步骤,主要有以下几个方向:

1. 服务运行账户的文件权限问题

你的服务默认会以Local System账户运行,这个账户通常没有权限访问用户私人目录下的文件。你代码中指定的日志路径是:

path = r"C:\Users\Documents\Projects\services\dist\Log.txt"

C:\Users\Documents属于当前登录用户的私人目录,Local System账户可能没有该目录的写入权限,导致服务启动时因无法创建/写入日志文件而阻塞,最终触发超时错误。

解决建议:

  • 将日志文件路径改为公共可写目录,比如 C:\Windows\Temp\Log.txt
  • 手动给Local System账户授予目标日志目录的写入权限

2. PyInstaller打包的依赖缺失或打包方式问题

虽然你添加了部分隐藏导入,但单文件打包模式(--onefile)可能会导致依赖加载异常:

  • 单文件EXE在运行时需要先解压到临时目录,这个过程可能因权限或依赖缺失失败
  • 可能还有其他pywin32相关的依赖没有被正确打包(比如win32serviceutil的子模块)

解决建议:

  • 暂时去掉--onefile参数,生成多文件的打包目录,再用该目录下的EXE注册服务
  • 用pyinstaller --debug=all参数打包,查看生成的调试日志,确认是否有依赖加载失败的信息
  • 补充更多必要的隐藏导入,比如--hidden-import=win32event --hidden-import=win32service

3. 服务启动逻辑的超时或异常处理问题

你的服务启动逻辑中,虽然流程看起来正确,但有两个潜在问题:

  1. 异常日志的事件ID错误:你在main方法的异常捕获里,用了servicemanager.PYS_SERVICE_STARTED(服务启动成功的事件ID),这会导致错误信息无法正确显示在事件查看器中,应该换成servicemanager.PYS_SERVICE_STOPPED或自定义错误事件ID
  2. 如果日志文件打开失败,服务会进入异常处理,但没有明确的退出逻辑,可能导致服务卡在启动状态

解决建议:

  • 修改异常日志的事件ID:
    servicemanager.LogMsg(servicemanager.EVENTLOG_ERROR_TYPE,
                          servicemanager.PYS_SERVICE_STOPPED,
                          (f"Error: {str(e)}", ''))
    
  • 打开事件查看器(eventvwr.msc),在「Windows日志 -> 应用程序」中查找服务相关的错误日志,这能帮你定位具体的失败原因

4. 服务注册命令的格式错误

你第二次尝试用Python解释器直接运行脚本注册服务时,命令格式有误:

sc create PythonApp binPath= "C:\Python\Python313\Python.exe --C:\Users\Documents\Projects\services\win_service2.py"
  • binPath=和路径之间不能有空格(sc命令对参数格式很严格)
  • 脚本路径前不需要加--,正确的命令应该是:
    sc create PythonApp binPath="C:\Python\Python313\Python.exe C:\Users\Documents\Projects\services\win_service2.py"
    

5. 系统服务超时阈值的问题

Windows服务控制管理器默认的启动超时时间是30秒,如果你的服务在启动过程中(比如依赖加载、初始化操作)耗时超过这个时间,也会触发1053错误。不过从你的代码来看,启动逻辑比较简单,这个概率相对较低,但可以尝试调整服务的超时设置。

解决建议:

  • 打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control,修改ServicesPipeTimeout值为60000(毫秒,即60秒),重启系统后生效

备注:内容来源于stack exchange,提问作者Andrey Kogut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:33:05