Visual Studio C# WinForm调用Process.Start打开链接提示找不到文件如何解决
C# 调用Process.Start打开网址报错排查方案
根本原因
System.Diagnostics.Process.Start直接传入网址的写法只在.NET Framework环境下默认生效,.NET Core 3.x、.NET 5+版本中该方法的默认行为变更:默认将传入的字符串当作本地可执行文件路径查找,不会自动调用系统Shell关联的默认浏览器处理网址,因此会抛出「找不到指定文件」的错误。
排查步骤
- 首先确认项目目标框架:右键项目 → 打开「属性」面板 → 切换到「应用程序」标签,查看目标框架类型
- 若为非
.NET Framework环境,优先使用适配写法解决 - 若为
.NET Framework环境仍报错,按Win+R输入cmd打开命令提示符,执行start https://www.example.com测试,如果系统无法弹出浏览器,说明系统HTTP协议关联损坏,重置默认浏览器即可修复
通用解决方案(兼容所有.NET版本)
修改启动代码,显式指定UseShellExecute = true,告知系统通过Shell层的关联程序打开目标资源:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("https://www.example.com") { UseShellExecute = true });
特殊场景解决方案(无Shell执行权限时)
如果程序运行环境限制无法开启UseShellExecute,可以先读取注册表获取系统默认浏览器路径,再传入网址启动:
using Microsoft.Win32; // 读取注册表中HTTP协议的关联默认浏览器路径 string registryKeyPath = @"HTTP\shell\open\command"; using RegistryKey registryKey = Registry.ClassesRoot.OpenSubKey(registryKeyPath, false); string defaultBrowserPath = registryKey.GetValue(null).ToString().Split('"')[1]; // 启动浏览器打开目标网址 System.Diagnostics.Process.Start(defaultBrowserPath, "https://www.example.com");
注意:网址必须携带
http://或https://前缀,缺少前缀会被系统识别为本地文件路径,同样会触发找不到文件错误。
内容的提问来源于stack exchange,提问作者lupus
相关产品推荐
相关产品推荐

