VS2019 WinForm调用Process.Start报Win32Exception无效平台应用问题
报错核心原因
该报错与项目平台配置、Visual Studio安装状态、Windows系统版本无关联,是.NET Core 3.1、.NET 5.0框架对Process.Start的默认行为调整导致的:
- 传统.NET Framework环境下,
Process.Start默认启用UseShellExecute = true,会调用系统Shell按照文件关联规则打开对应类型的文件(例如txt格式默认唤起记事本、docx格式唤起Word) - 从.NET Core版本开始,框架将
UseShellExecute的默认值修改为false,此时传入txt、docx这类非PE格式的文件路径时,程序会直接尝试将该文件作为独立可执行程序加载,由于文件本身不是合法的系统可执行应用,就会抛出The specified executable is not a valid application for this OS platform的异常。
落地解决方案
打开本地关联格式文件时,需要在调用逻辑中显式开启UseShellExecute参数,替换原有按钮点击事件中的代码即可:
// 兼容.exe、.txt、.docx等各类本地文件打开需求的通用写法 System.Diagnostics.Process.Start(new ProcessStartInfo() { FileName = @"C:\Users\你的用户名\Desktop\asd.txt", // 显式启用Shell执行,匹配系统默认文件关联规则 UseShellExecute = true });
补充说明:此前尝试的调整x86/x64/Any CPU平台目标、脱离VS直接运行编译产物、更新Windows系统、重装Visual Studio等操作,均未触及框架默认行为变更的核心逻辑,因此无法解决该问题。调整参数后无需额外修改平台配置,即可正常唤起对应程序打开目标文件。
内容的提问来源于stack exchange,提问作者Marcell Turbók
相关产品推荐
相关产品推荐

