Python使用subprocess打开Windows .lnk快捷方式报WinError 193如何解决
报错原因
subprocess.Popen和subprocess.call默认仅支持直接调用Win32格式的可执行文件(.exe、.com等二进制程序)。.lnk是Windows系统的快捷方式文件,本质是存储目标程序路径、启动参数的配置文件,不属于可执行二进制,直接传入subprocess运行就会触发OSError: [WinError 193] %1 is not a valid Win32 application报错。
可行解决方法
方法1:使用os.startfile(最简便,和双击行为完全一致)
os.startfile是Python针对Windows平台封装的系统调用接口,行为和用户在资源管理器里双击文件完全一致,会自动按照系统关联规则打开对应文件,不需要额外处理快捷方式格式:
import os # 替换为你自己的快捷方式实际路径,字符串前加r避免反斜杠转义 lnk_path = r"C:\Users\(你的用户名)\Desktop\Minecraft Launcher.lnk" os.startfile(lnk_path)
方法2:调用explorer.exe解析快捷方式
如果不想用os模块的专属接口,可以把快捷方式路径作为参数传给Windows资源管理器explorer.exe,由资源管理器负责解析并启动快捷方式指向的程序:
import subprocess lnk_path = r"C:\Users\(你的用户名)\Desktop\Minecraft Launcher.lnk" # 路径带空格时必须用双引号包裹完整路径,避免参数解析错误 subprocess.Popen(f'explorer.exe "{lnk_path}"')
优化建议
- 不要硬编码用户名路径,可以用Python内置方法自动获取当前用户的桌面路径,代码通用性更强,不需要每次换用户都修改路径:
import os # 自动获取当前用户的桌面目录 desktop = os.path.join(os.path.expanduser("~"), "Desktop") lnk_path = os.path.join(desktop, "Minecraft Launcher.lnk") os.startfile(lnk_path)
- 如果需要获取快捷方式指向的真实exe路径,可以安装
pywin32库后通过win32com接口解析lnk文件,对于当前直接启动启动器的需求来说,前两种方法已经完全够用,不需要额外装依赖。
内容的提问来源于stack exchange,提问作者Calax
相关产品推荐
相关产品推荐

