Windows Forms应用调用Process.Start()报错问题咨询
问题原因
在.NET Core/.NET 5+(包括你使用的.NET 6)中,Process.Start(string) 方法默认不会识别URL并调用浏览器,它会将传入的URL当作可执行文件路径,在当前工作目录下查找,因此出现“系统找不到指定文件”的错误。而.NET Framework中该方法默认会通过系统shell处理URL,自动调用默认浏览器打开。
解决方案
有两种可靠的解决方式:
方法一:使用ProcessStartInfo指定UseShellExecute为true
显式配置ProcessStartInfo,开启UseShellExecute(该属性在.NET Core+中默认是false,开启后会让系统shell处理URL):
private void button1_Click(object sender, EventArgs e) { Process.Start(new ProcessStartInfo("https://www.google.com") { UseShellExecute = true }); }
方法二:调用Windows Forms的Launcher(适用于.NET 6+ WinForms)
.NET 6及以上的Windows Forms提供了更简洁的Launcher类,专门用于打开URI:
using System.Windows.Forms; private void button1_Click(object sender, EventArgs e) { Launcher.LaunchUri(new Uri("https://www.google.com")); }
补充说明
UseShellExecute = true不仅能处理URL,还能处理其他系统可识别的文件类型(比如文档、图片等),会调用默认关联程序打开。- 如果你的应用是.NET 6+的桌面应用,推荐使用
Launcher方法,它是专门为现代.NET桌面场景设计的API,更简洁可靠。
内容的提问来源于stack exchange,提问作者ICODE
相关产品推荐
相关产品推荐

