【发布时间】:2026-02-11 00:35:02
【问题描述】:
我有一个面向 .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。
【问题讨论】:
-
你能给我们你正在使用的 url 字符串吗?这可能会有所帮助!
-
您确定在客户端机器上传入的是
http://www.example.com,而不是www.example.com?也许您可以在记录尝试的 URL 的 try-catch 块中添加日志记录代码。 -
我没有输入真正的价值或 url,因为它是用于我们的私有 API。但它与
http://website.net/variousparameters类似。我可以确认网站没有关闭,或者类似的东西。这是我们的一位用户报告的,我无法重现它。 -
不幸的是,如果客户的机器损坏或配置错误,您将无能为力。这只是一个事实。漫长的道路可能是通过注册表查看默认的网络浏览器并使用该路径,然后使用您网站的命令参数并以这种方式使用 ProcessStartInfo(或 Process.Start 接受参数的重载)跨度>