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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:36:21