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

auto_py_to_exe打包后NSSM安装Python服务启动失败(错误码3)

解决打包exe后Windows服务启动错误码3的问题

错误原因分析

Windows服务错误码3表示系统找不到指定的文件或路径,你的场景里主要是以下几个问题导致:

  1. 打包后仍依赖原虚拟环境的Python解释器,目标环境中该路径不存在;
  2. 服务工作目录配置错误,导致找不到配置文件或依赖;
  3. 命令中的引号转义问题,导致subprocess执行时解析错误;
  4. 打包时未包含必要的依赖文件(如配置文件)。

具体解决方案

1. 修改服务安装命令,直接指向打包后的exe

原命令调用虚拟环境的python.exe执行脚本,打包成exe后应直接用生成的exe作为服务执行程序,脱离外部Python环境:

cmds = [
    [
        "C:/RT_Apps/RT_SIP_Sounder/config/nssm",
        "install",
        "RT SIP Alert",
        "C:/你的打包输出目录/xxx.exe"  # 替换为实际的exe路径
    ]
]
for cmd in cmds:
    subprocess.run(cmd, cwd="C:/RT_Apps/RT_SIP_Sounder/config", stdout=subprocess.PIPE)
    print(f"CMD RUN: {' '.join(cmd)} ")
    time.sleep(3)

注意:打包时推荐选择onedir模式(多文件打包),相比onefile(单文件),路径问题更易排查和处理。

2. 强制设置服务的工作目录

服务启动时的默认工作目录可能不是配置文件所在路径,需手动指定:

# 安装服务后执行该命令设置工作目录
nssm set "RT SIP Alert" AppDirectory "C:/RT_Apps/RT_SIP_Sounder/config"

确保服务启动时能读取到配置文件。

3. 打包时包含所有依赖文件

在auto_py_to_exe的配置中,将配置文件、必要的资源文件添加到Additional Files区域,确保打包后这些文件和exe处于同一目录(或你指定的路径),避免服务启动时找不到依赖。

4. 用列表形式传递subprocess命令

原代码中用字符串形式传递命令,存在引号转义风险,改用列表形式传参,subprocess会自动处理空格和引号,避免解析错误。

5. 查看服务日志定位具体问题

通过nssm编辑服务配置,开启日志记录:

nssm edit "RT SIP Alert"

切换到Logging标签,设置日志文件的保存路径,启动服务后查看日志,能精准定位是找不到exe、配置文件还是其他依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:11:22