.NET 6 VB.NET调用Process.Start启动网页提示找不到指定文件怎么办
问题根因
你第二段修改的代码存在逻辑错误:你给link.StartInfo设置了UseShellExecute = True,但调用Start方法时传入了一个全新的ProcessStartInfo对象,之前做的配置完全没有生效。
.NET 6 延续了.NET Core的默认配置:ProcessStartInfo.UseShellExecute默认值为False。这个状态下Process类不会调用系统Shell解析URL和默认浏览器的关联关系,会直接把传入的字符串当做本地可执行文件路径查找,自然会抛出“系统找不到指定的文件”的错误。这也解释了为什么系统运行窗口能正常打开网址——运行窗口本身就是走Shell执行逻辑的。
可用的正确代码
简洁写法
不需要显式声明Process对象,直接初始化带正确配置的ProcessStartInfo传入即可:
Dim targetUrl As String = "https://example.com" Process.Start(New ProcessStartInfo(targetUrl) With { .UseShellExecute = True })
显式Using块写法
如果需要用Using块释放Process资源,不要在Start方法里传新的ProcessStartInfo实例,直接修改Process对象自带的StartInfo属性即可:
Using link As New Process() link.StartInfo.FileName = "https://example.com" link.StartInfo.UseShellExecute = True link.Start() End Using
排查注意点
- 传入的URL不需要额外加引号、转义符,直接传原始字符串即可
- 如果程序以Windows服务、计划任务(非交互用户模式)运行,会拿不到当前登录用户的默认浏览器关联配置,这种场景下需要显式指定浏览器exe路径再传URL参数
- 只要给ProcessStartInfo设置了
UseShellExecute = True,就不需要额外写explorer或者cmd start的中转逻辑,系统会自动调用默认浏览器打开链接
内容的提问来源于stack exchange,提问作者Paul Williams
相关产品推荐
相关产品推荐

