我有一个面向.NET 2.0的WinForms应用程序。我们收到一个报告说,我们的一个按钮不工作,它所做的只是在他们的默认浏览器中打开一个网页。通过查看日志,我可以看到Process.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”
在网上搜索后,我发现this blog也有同样的问题。不同的是,这是Windows 8特有的。他发现一些浏览器在安装时没有正确注册。随着浏览器发布更新,这个问题已经得到了修复。(博客日期是Windows 8发布后不久)。
如果我们的客户没有安装浏览器,我可以理解。但事实并非如此。我还加载了Windows XP虚拟机,并尝试从“文件类型”选项卡下的“文件夹选项”窗口中删除.html
、URL: HyperText Transfer Protocol
等文件类型的所有关联。但我无法重现该问题。
有人知道为什么会失败,和/或我如何重现错误吗?
顺便说一句,我们的客户运行的是Windows XP。
6条答案
按热度按时间gcuhipw91#
有同样的问题,解决了没有IE回退.
这将使其行为更像是在“运行”窗口中键入:
请注意,我将
UseShellExecute = true
设置为默认值在**.Net Framework上应为
true
,在.Net Core**上应为false
和UWP应用程序不应使用此标志。see docs
(我在.Net Core上运行)
6vl6ewon2#
尝试显式地将
explorer.exe
用于fileName
。详见Process.Start(url) broken on Windows 8/Chrome - are there alternatives?
jq6vz3qz3#
您可以使用Windows操作系统沿着的
InternetExplorer
打开URL
。试试这个:
mzsu5hc04#
有时在Core中,即使设置了
ProcessInfo.WorkingDirectory
,也需要设置Environment.CurrentDirectory
。pb3skfrl5#
我在一个windows窗体应用程序中有这样的代码,它工作得很好:
tmb3ates6#
我得到
System.ComponentModel.Win32Exception
适用于WPF框架项目(主机=win7,x64)。
试试看:
如果浏览器未启动,则在catch块中添加
Process.Start("chrome.exe", filename)
;它将以启动chrome浏览器,并以“https://www.example.com“作为标签。
下面是完整的示例: