如何从我的应用程序打开一个网页?

我想让我的WPF应用程序打开默认的浏览器并转到某个网页。 我怎么做?

System.Diagnostics.Process.Start("http://www.webpage.com"); 

其中之一。

我一直在使用这一行来启动默认的浏览器:

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

Microsoft在KB305703文章中解释了如何使用Visual C#以编程方式启动默认Internet浏览器 。

不要忘记检查故障排除部分。

虽然已经给出了一个很好的答案(使用Process.Start ),但将它封装在一个函数中是比较安全的,该函数检查传递的string是否确实是一个URI,以避免意外地在机器上启动随机进程。

 public static bool IsValidUri(string uri) { if (!Uri.IsWellFormedUriString(uri, UriKind.Absolute)) return false; Uri tmp; if (!Uri.TryCreate(uri, UriKind.Absolute, out tmp)) return false; return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps; } public static bool OpenUri(string uri) { if (!IsValidUri(uri)) return false; System.Diagnostics.Process.Start(uri); return true; } 

您无法从高级应用程序启动网页。 这将引发0x800004005exception,可能是因为explorer.exe和浏览器运行不升级。

要在非高架网页浏览器中从高架应用程序启动网页,请使用Mike Feng编写的代码 。 我试图将URL传递给lpApplicationName,但没有奏效。 也不是当我使用CreateProcessWithTokenW与lpApplicationName =“explorer.exe”(或iexplore.exe)和lpCommandLine = url。

下面的解决方法不起作用:创build一个有一个任务的小EXE项目:Process.Start(url),使用CreateProcessWithTokenW来运行这个.EXE。 在我的Windows 8 RC上,这工作正常,并在Google Chrome中打开网页。

这里是我完整的代码如何打开。

有2个选项:

  1. 打开使用默认浏览器(行为就像在浏览器窗口内打开)

  2. 通过默认的命令选项打开(行为就像你使用“RUN.EXE”命令)

  3. 打开“资源pipe理器”(行为就像你在你的文件夹窗口url中写的url)

[可选build议] 4.使用iexplore进程位置打开所需的url

码:

 internal static bool TryOpenUrl(string p_url) { // try use default browser [registry: HKEY_CURRENT_USER\Software\Classes\http\shell\open\command] try { string keyValue = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Classes\http\shell\open\command", "", null) as string; if (string.IsNullOrEmpty(keyValue) == false) { string browserPath = keyValue.Replace("%1", p_url); System.Diagnostics.Process.Start(browserPath); return true; } } catch { } // try open browser as default command try { System.Diagnostics.Process.Start(p_url); //browserPath, argUrl); return true; } catch { } // try open through 'explorer.exe' try { string browserPath = GetWindowsPath("explorer.exe"); string argUrl = "\"" + p_url + "\""; System.Diagnostics.Process.Start(browserPath, argUrl); return true; } catch { } // return false, all failed return false; } 

和帮手function:

 internal static string GetWindowsPath(string p_fileName) { string path = null; string sysdir; for (int i = 0; i < 3; i++) { try { if (i == 0) { path = Environment.GetEnvironmentVariable("SystemRoot"); } else if (i == 1) { path = Environment.GetEnvironmentVariable("windir"); } else if (i == 2) { sysdir = Environment.GetFolderPath(Environment.SpecialFolder.System); path = System.IO.Directory.GetParent(sysdir).FullName; } if (path != null) { path = System.IO.Path.Combine(path, p_fileName); if (System.IO.File.Exists(path) == true) { return path; } } } catch { } } // not found return null; } 

希望我帮助。

我已经testing完美

我一直在使用这一行来启动默认的浏览器:

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

我有这个解决scheme,因为我今天有类似的问题。

假设您想要使用pipe理员权限运行的应用程序打开http://google.com

 ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/"); Process.Start(startInfo); 

老派的方式;)

 public static void openit(string x) { System.Diagnostics.Process.Start("cmd", "/C start" + " " + x); } 

使用: openit("www.google.com");