Python开发的Windows服务启动失败(错误代码1)求助
解决方案
排除ETW日志错误干扰
事件日志里的ShimEngine错误是系统层面问题,和你的服务启动失败无关,不用被该信息误导,重点排查服务本身的启动逻辑和打包问题。修正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参数在打包时包含这些文件。
- 补充缺失的pywin32依赖打包,执行以下命令重新打包:
检查服务执行权限
- 右键服务→属性→登录选项卡,确保选择的账户(如Local System)拥有访问
test.py、BIUtilities模块相关文件的权限。 - 若服务需要读写特定目录,给服务账户添加对应目录的读写权限。
- 右键服务→属性→登录选项卡,确保选择的账户(如Local System)拥有访问
添加日志调试
在服务代码中添加日志输出,定位启动环节的问题: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,查看命令行抛出的错误,快速定位依赖缺失问题。
修正服务类初始化逻辑
在Parseltongue类中添加构造方法,初始化状态变量,避免未定义异常:class Parseltongue(PythonService): def __init__(self, args): super().__init__(args) self.isrunning = False # 提前初始化状态变量重新注册服务
- 先卸载现有服务:
myscript.exe remove - 重新安装服务:
myscript.exe install - 启动前确认所有依赖文件路径正确。
- 先卸载现有服务:
内容的提问来源于stack exchange,提问作者ozymandingus_
相关产品推荐
相关产品推荐

