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

将Python生成的exe设为PDF默认程序后打印功能失效求助

问题原因

当你把生成的exe设为PDF默认打开程序后,Windows系统中PDF文件的「print」操作关联也变成了这个exe。而startfile(argv[1], "print")的原理是调用系统为该文件类型关联的程序来执行打印操作,这就导致了循环:你的exe调用print操作,系统启动你的exe来处理,而你的exe又调用startfile,此时系统找不到能真正处理PDF打印的关联程序,所以抛出WinError 1155。

解决方案

方法1:直接调用PDF阅读器命令行打印(推荐)

放弃依赖startfile的系统关联,直接用PDF阅读器(比如Acrobat Reader)的命令行参数来打印,完全绕开系统关联冲突。修改后的代码如下:

from sys import argv
from os import system
import time

# 检查是否传入了文件路径
if len(argv) < 2:
    exit()

pdf_path = argv[1]
# 调用Acrobat Reader的命令行打印,/p参数是打印,/h是隐藏阅读器窗口
# 注意路径要和你电脑上Acrobat Reader的安装路径一致
system(f'"C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroRD32.exe" /p /h "{pdf_path}"')

# 等待打印任务完成,时间可根据实际打印文件大小调整
time.sleep(5)
# 强制关闭Acrobat Reader进程
system("TASKKILL /F /IM AcroRD32.exe")

方法2:修改系统「打印」操作的关联(不修改默认打开程序)

如果你不想改代码,可以修改注册表,让PDF的「打印」操作关联到你的exe,而默认打开程序还是用原来的PDF阅读器,避免冲突:

  • 按下Win+R输入regedit打开注册表编辑器
  • 找到HKEY_CLASSES_ROOT\.pdf,查看右侧默认值对应的ProgID(比如AcroExch.Document.DC)
  • 进入HKEY_CLASSES_ROOT\[刚才的ProgID]\shell\print\command
  • 将默认值改为你的exe路径,后面加上 "%1"(比如"D:\\YourExePath\\AutomaticPrint.exe" "%1")
  • 这样双击PDF还是用原来的阅读器打开,右键选择「打印」时会启动你的exe执行自动打印

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:20:28