Win11中subprocess.run调用Notepad报package identity错误,os.system正常?
Windows 11中subprocess.run启动记事本报WinError 15700的解决办法
问题原因
Windows 11的记事本已转为MSIX封装的UWP应用,C:\WINDOWS\notepad.exe只是一个轻量启动器。用户级安装的Miniforge环境中,直接用subprocess.run启动该启动器时,缺少UWP应用所需的包身份上下文,触发WinError 15700错误;而os.system通过cmd.exe间接启动,cmd会自动处理UWP应用的启动上下文,因此可以正常运行。
解决办法
通过cmd.exe间接启动
模拟os.system的运行逻辑,借助cmd.exe启动记事本,规避直接调用启动器的上下文问题:import subprocess subprocess.run(['cmd.exe', '/c', r'C:\WINDOWS\notepad.exe'])直接调用UWP记事本的URI
使用Windows的URI协议直接启动UWP版本的记事本,无需依赖exe启动器:import subprocess subprocess.run(['explorer.exe', 'notepad:'])或者启用shell调用
start命令:import subprocess subprocess.run(['start', 'notepad:'], shell=True)通过PowerShell启动
借助PowerShell的Start-Process命令处理启动上下文:import subprocess subprocess.run(['powershell.exe', '-Command', 'Start-Process notepad.exe'])调整subprocess创建标志(可选)
先安装pywin32库(pip install pywin32),再尝试修改进程创建标志补充必要上下文:import subprocess import win32process subprocess.run( [r'C:\WINDOWS\notepad.exe'], creationflags=win32process.CREATE_NEW_CONSOLE )
内容的提问来源于stack exchange,提问作者Diomedea
相关产品推荐
相关产品推荐

