C#中如何调用默认浏览器打开网站?Process.Start失效解决
问题根因
你写的System.Diagnostics.Process.Start("http://website.com")运行不生效,是两个原因导致的:
- .NET Core及后续的.NET 5+版本中,
ProcessStartInfo.UseShellExecute的默认值从老版.NET Framework的true改成了false。关闭这个配置后,Process类不会走Windows系统的协议关联逻辑,只会直接尝试启动本地exe文件,传入URL时会因为找不到对应本地文件静默失败,既不抛错也不会打开页面 - Windows 11对默认浏览器(尤其是预装的Microsoft Edge这类打包应用)的URL唤起加了校验,必须走系统Shell路由才能正常拉起,直接调用底层进程启动接口会被系统拦截
可直接运行的实现方案
方案1:跟随系统默认浏览器打开(推荐)
这个写法兼容所有.NET版本,自动适配Win10/Win11系统上设置的任意默认浏览器,不需要硬编码浏览器路径:
using System.Diagnostics; // 将字符串参数替换为你实际要打开的目标站点地址即可 Process.Start(new ProcessStartInfo("你的目标游戏站点地址") { UseShellExecute = true });
配合你要的提示逻辑的完整示例:
using System.Diagnostics; // 自行实现不定期触发逻辑,比如随机休眠后执行以下代码 Console.WriteLine("the game!"); Process.Start(new ProcessStartInfo("你的目标游戏站点地址") { UseShellExecute = true });
方案2:强制使用Microsoft Edge打开
如果你不想依赖系统默认浏览器设置,可以直接定位Edge的本地安装路径启动:
using System.Diagnostics; // 优先查找x86路径下的Edge稳定版安装位置 string edgeInstallPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Microsoft\Edge\Application\msedge.exe"); // x86路径不存在时查找x64安装位置 if (!File.Exists(edgeInstallPath)) { edgeInstallPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Microsoft\Edge\Application\msedge.exe"); } // 启动Edge并打开目标站点 Process.Start(new ProcessStartInfo { FileName = edgeInstallPath, Arguments = "你的目标游戏站点地址", UseShellExecute = false });
注意事项
- 不要省略
UseShellExecute = true的配置,这是Win11下能正常唤起默认浏览器的核心参数 - 程序运行不需要管理员权限,普通用户权限下即可正常触发,不会被UAC拦截
- 如果发布时开启了程序集裁剪,记得保留
System.Diagnostics相关类型,避免运行时抛出缺失类型异常
内容的提问来源于stack exchange,提问作者Unresolved
相关产品推荐
相关产品推荐

