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

Python开发的Windows服务启动失败(错误代码1)求助

解决方案

  1. 排除ETW日志错误干扰
    事件日志里的ShimEngine错误是系统层面问题,和你的服务启动失败无关,不用被该信息误导,重点排查服务本身的启动逻辑和打包问题。

  2. 修正PyInstaller打包参数

    • 补充缺失的pywin32依赖打包,执行以下命令重新打包:
      python -m PyInstaller --runtime-tmpdir=. --onefile --hidden-import win32timezone --hidden-import pywintypes --hidden-import win32api myscript.py
      
    • 注意你使用Python 3.10,但之前复制的是pywintypes37.dll,版本不匹配。找到C:\Python310\Lib\site-packages\pywin32_system32目录下的pywintypes310.dll和pythoncom310.dll,复制到打包后的exe同目录,或者通过--add-data参数在打包时包含这些文件。
  3. 检查服务执行权限

    • 右键服务→属性→登录选项卡,确保选择的账户(如Local System)拥有访问test.py、BIUtilities模块相关文件的权限。
    • 若服务需要读写特定目录,给服务账户添加对应目录的读写权限。
  4. 添加日志调试
    在服务代码中添加日志输出,定位启动环节的问题:

    import logging
    # 初始化日志
    logging.basicConfig(filename='C:\\service_debug_log.txt', level=logging.INFO, format='%(asctime)s - %(message)s')
    
    # 在关键步骤添加日志
    def SvcDoRun(self):
        logging.info("Service start pending reported")
        self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
        
        self.start()
        logging.info("Service start method executed")
        self.ReportServiceStatus(win32service.SERVICE_RUNNING)
        
        self.main()
    

    也可以直接运行打包后的exe,查看命令行抛出的错误,快速定位依赖缺失问题。

  5. 修正服务类初始化逻辑
    在Parseltongue类中添加构造方法,初始化状态变量,避免未定义异常:

    class Parseltongue(PythonService):
        def __init__(self, args):
            super().__init__(args)
            self.isrunning = False  # 提前初始化状态变量
    
  6. 重新注册服务

    • 先卸载现有服务:myscript.exe remove
    • 重新安装服务:myscript.exe install
    • 启动前确认所有依赖文件路径正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:25:29