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

Python打包EXE为Windows服务启动报错1053问题求助

错误原因定位

1053错误本质是Windows服务控制管理器没有在默认30秒阈值内收到服务的启动成功反馈,结合你源码可正常运行、仅打包为EXE后报错的场景,可按以下顺序排查修复:


1. 打包配置问题修复(占该类问题90%以上概率)

  • 禁止使用-F/--onefile单文件模式打包:单文件模式启动时需要先解压全部依赖到临时目录,大概率超过30秒的服务启动超时限制,改为目录模式打包即可
  • 显式添加隐式依赖:pywin32相关的服务模块servicemanager、win32timezone属于动态导入,打包工具默认不会识别,需要手动添加
    如果你使用PyInstaller打包,参考命令如下:
    pyinstaller --hidden-import=servicemanager --hidden-import=win32timezone testing.py
    
    如果你用auto-py-to-exe,在「高级」->「隐藏导入」配置项中添加上述两个模块即可
  • 不要添加-w/--windowed参数打包:服务属于控制台程序,使用GUI模式打包会导致IO异常卡住启动流程
  • 确认打包环境和系统位数匹配:64位系统需使用64位Python、64位pywin32依赖打包为64位EXE,位数不匹配会导致服务启动异常

2. 代码逻辑修复

你现有代码存在两处可能导致启动卡住的问题:

  • 缺失必要导入语句:你贴出的代码未导入依赖模块,打包时会因为模块缺失卡住,需在代码头部补全导入:
    import datetime
    import socket
    import win32serviceutil
    import win32service
    import win32event
    import servicemanager
    
  • 死循环未处理停止信号且资源泄漏:全局WriteToFile函数的无限死循环没有退出逻辑,也没有处理服务停止信号,同时文件操作未正确释放资源,改造参考:
    # 改为类方法,方便获取服务实例的停止信号和运行状态
    def WriteToFile(self):
        while self.isrunning:
            # 使用with上下文自动释放文件资源
            with open("C:\\Users\\Public\\file.txt" , "w" , encoding="utf-8") as file:
                now = datetime.datetime.now()
                now = now.strftime("%B %d, %y %H:%M:%S")
                file.write(now)
            # 等待1秒,同时监听停止信号,避免CPU占满也能及时响应服务停止指令
            win32event.WaitForSingleObject(self.hWaitStop, 1000)
    
    # main方法对应修改为调用类方法
    def main(self):
        self.WriteToFile()
    

3. 权限问题排查

  • 建议将输出文件路径从C:\\file.txt改为C:\\Users\\Public\\file.txt等公共目录,默认Local System服务账户写C盘根目录可能触发UAC权限拦截导致卡住
  • 安装、启动服务时必须使用管理员权限打开命令提示符,权限不足也会触发启动超时

4. 调试验证

如果按上述步骤操作后仍有问题,可直接在管理员权限的cmd中运行打包后的EXE文件,查看控制台输出的报错信息,即可定位具体问题。


内容的提问来源于stack exchange,提问作者Slazenger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:15:05