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

为何.NET 5.0调用Process.Start打开被占用文件报错但.NET Framework 4.7.1正常

问题根因

这是.NET 5+ 针对Process.Start的官方破坏性变更导致的行为差异:

  • .NET Framework环境下,ProcessStartInfo.UseShellExecute属性的默认值为true,调用Process.Start(文件路径)时底层走系统ShellExecute逻辑,仅将文件路径交给系统匹配关联程序启动,不会主动占用/锁定目标文件,所以哪怕文件被其他进程占用也能正常触发关联程序启动。
  • .NET 5+环境下,ProcessStartInfo.UseShellExecute属性的默认值改为false,默认优先走CreateProcess逻辑,该逻辑会先尝试以独占模式打开目标文件校验是否为可执行程序,这一步就会触发文件占用报错。

解决方案

最通用的方案是显式指定UseShellExecute = true,即可完全还原.NET Framework下的原有行为,且支持跨平台运行,修改后的代码如下:

Process.Start(new ProcessStartInfo(sourceFile)
{
    UseShellExecute = true
});

如果你的程序仅面向Windows环境,且需要固定启动程序,也可以手动指定关联程序路径作为启动入口,将目标文件作为参数传入,避免框架层直接操作目标文件:

// 示例为AutoCAD场景,其他关联程序替换对应安装路径即可
Process.Start(new ProcessStartInfo
{
    FileName = @"C:\Program Files\Autodesk\AutoCAD 202X\acad.exe",
    Arguments = $"\"{sourceFile}\""
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:45:05