从Windows窗体打开URL


77

我正在尝试从Windows窗体提供指向我公司网站的链接。我希望行为良好,并使用用户喜欢的浏览器启动。

从Windows窗体应用程序在用户的默认浏览器中打开URL的最佳方法是什么?


1
可能他们会向标准库中添加API,我听说这件事会很大。
Panic Panic 2013年

Answers:


134

文章将引导您完成它。

简短答案:

ProcessStartInfo sInfo = new ProcessStartInfo("http://mysite.com/");  
Process.Start(sInfo);

精确而准确。+1
iMatoria

2
当我尝试这样做时,为什么会得到未处理的Win32Exception:“找不到应用程序”?我在Win7 64位上。谢谢
Tommy B.

文章链接已断开,一只小猫正在受苦:,(
Windgate

35
using System.Diagnostics;

Process.Start("http://www.google.com/");

这种方法对我有用,但是我可能会遗漏一些重要的东西。


11

这是两全其美的方法:

Dim sInfo As New ProcessStartInfo("http://www.mysite.com")

Try
     Process.Start(sInfo)
Catch ex As Exception
     Process.Start("iexplore.exe", sInfo.FileName)
End Try

我发现,当在Windows 8设备上运行桌面应用程序时,Blorgbeard提供的答案将失败。就Camillo而言,您应该尝试使用用户的默认浏览器应用程序打开它,但是如果未分配浏览器应用程序,则将引发未处理的异常。

我将其发布为答案,因为它可以处理异常,同时仍尝试在默认浏览器中打开链接。


6

我喜欢这里描述的方法。启动浏览器时,它考虑了可能的异常和延迟。

为了获得最佳实践,请确保您不仅忽略异常,而且捕获该异常并执行适当的操作(例如,通知用户打开浏览器将其导航到url失败)。


2
是的,您应该始终考虑。他们只是吞下异常的方法使我感到畏缩。在这种特定情况下,您也许可以为其指定参数,但是我永远不会有一个空的“ catch”块。以这种方式完全掩盖一个问题太容易了。
阿德里安·克拉克

你是对的。直到看到帖子,我才真正想到可能的例外(我应该考虑)。
Sumrak

1

对于那些获取“ Win32Exception:系统找不到指定的文件”的用户

这应该做的工作:

ProcessStartInfo psInfo = new ProcessStartInfo
{
   FileName = "https://www.google.com",
   UseShellExecute = true
};
Process.Start(psInfo);

UseShellExecute在此处进一步描述

对我而言,问题是由于此处描述的.NET运行时所致


-3

上面的方法很完美,我想向您推荐在哪里可以传递参数的方法。

Process mypr;
mypr = Process.Start("iexplore.exe", "pass the name of website");

1
这应该是评论,而不是答案。
奥斯汀·亨利

请使用适当的写作风格,并避免在此处使用“聊天语言”进行写作
Spontifixus 2012年

1
我想知道为什么您觉得这种方法更好?在我看来,这与最初的意图不同,后者是在用户首选的浏览器中打开的。此方法提供了浏览器可执行文件,因此即使用户已将Chrome或Firefox指定为其首选的网络浏览器,也将始终在IE中打开。
阿德里安·克拉克

4
-1是因为Internet Explorer。当某些愚蠢的应用程序打开Internet Explorer时,我讨厌它,使我不愿等待它启动,因此我可以关闭该死的东西并在实际的适当Web浏览器中打开URL 。这种事情是认为应用程序是由十二岁的孩子编码的即时原因。
卡米洛·马丁
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.