提问者:小点点

过程启动(url)失败


我有一个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虚拟机,并尝试删除文件类型的所有关联。htmlURL:HyperText Transfer Protocol等,从“文件类型”选项卡下的“文件夹选项”窗口。但我无法重现这个问题。

有人知道为什么这可能会失败,和/或我如何重现错误吗?

另外,我们的客户正在运行Windows XP。


共3个答案

匿名用户

解决了同样的问题,没有IE的退路
这将使其行为更像是在“运行”窗口中键入:

Process.Start(new ProcessStartInfo("https://www.example.com") { UseShellExecute = true });

注意,我正在设置UseShellExecute=true

默认值应为trueon。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);