我有一个WinForms应用程序。NET 2.0。我们有一个报告说,我们的一个按钮不工作,它所做的只是在默认浏览器中打开一个网页。通过查看日志,我可以看到过程。Start()
因找不到文件而失败。问题是我们将一个字符串url传递到Start()
方法中,因此我无法理解它为什么会生成此消息。
以下是日志中的例外情况:
System.ComponentModel.Win32Exception: The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName)
at *namespace*.Website.LaunchWebsiteAsync(String url)
The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName)
at *namespace*.Website.LaunchWebsiteAsync(String url)
为了完整性:
Process.Start(url);
其中url的值类似于:"http://www.example.com"
在网上搜索后,我发现这个博客有同样的问题。不同之处在于这是Windows 8特有的。他发现一些浏览器在安装时没有正确注册。这已被修复,因为浏览器发布了更新。(博客日期在Windows 8发布后不久)。
如果我们的客户没有安装浏览器,我可以理解。但事实并非如此。我还加载了Windows XP虚拟机,并尝试删除文件类型的所有关联。html
,URL:HyperText Transfer Protocol
等,从“文件类型”选项卡下的“文件夹选项”窗口。但我无法重现这个问题。
有人知道为什么这可能会失败,和/或我如何重现错误吗?
另外,我们的客户正在运行Windows XP。
解决了同样的问题,没有IE的退路
这将使其行为更像是在“运行”窗口中键入:
Process.Start(new ProcessStartInfo("https://www.example.com") { UseShellExecute = true });
注意,我正在设置UseShellExecute=true
默认值应为true
on。Net框架,并打开false
。Net核心
和UWP应用程序不应使用此标志。参见文档
(我在.Net Core上运行)
尝试显式地使用explorer.exe
作为fileName
。
如流程中所述。Windows 8/Chrome上的开始(url)已中断-是否有其他选择?
Process.Start("explorer.exe", url);
您可以使用Windows OS附带的InternetExplorer打开URL
。
试试这个:
Process.Start("IEXPLORE",url);