在一些场景中,会有跳转到浏览器网页的需求,例如:访问官网、文档说明等等。
如果是可以用 LinkLabel
来实现,那最好使用 LinkLabel
来实现,这样简单很多,但是有的时候可能需要代码逻辑来处理,这里就要采用复杂的代码来做各种判断了,实践积累下来的帮助类如下:
using Microsoft.Win32; using System; using System.Diagnostics; using System.IO; using System.Windows.Forms; namespace Project.Helper { /// <summary> /// 浏览器帮助类 /// </summary> class BrowserHelper { /// <summary> /// 调用系统浏览器打开网页 /// </summary> /// <param name="url">打开网页的链接</param> public static void OpenBrowserUrl(string url) { try { // 64位注册表路径 var openKey = @"SOFTWARE\Wow6432Node\Google\Chrome"; if (IntPtr.Size == 4) { // 32位注册表路径 openKey = @"SOFTWARE\Google\Chrome"; } RegistryKey appPath = Registry.LocalMachine.OpenSubKey(openKey); // 谷歌浏览器就用谷歌打开,没找到就用系统默认的浏览器 // 谷歌卸载了,注册表还没有清空,程序会返回一个"系统找不到指定的文件。"的bug if (appPath != null) { var result = Process.Start("chrome.exe", url); if (result == null) { OpenIe(url); } } else { var result = Process.Start("chrome.exe", url); if (result == null) { OpenDefaultBrowserUrl(url); } } } catch { // 出错调用用户默认设置的浏览器,还不行就调用IE OpenDefaultBrowserUrl(url); } } /// <summary> /// 用IE打开浏览器 /// </summary> /// <param name="url"></param> public static void OpenIe(string url) { try { Process.Start("iexplore.exe", url); } catch (Exception ex) { MessageBox.Show(ex.Message); // IE浏览器路径安装:C:\Program Files\Internet Explorer // at System.Diagnostics.process.StartWithshellExecuteEx(ProcessStartInfo startInfo)注意这个错误 try { if (File.Exists(@"C:\Program Files\Internet Explorer\iexplore.exe")) { ProcessStartInfo processStartInfo = new ProcessStartInfo { FileName = @"C:\Program Files\Internet Explorer\iexplore.exe", Arguments = url, UseShellExecute = false, CreateNoWindow = true }; Process.Start(processStartInfo); } else { if (File.Exists(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe")) { ProcessStartInfo processStartInfo = new ProcessStartInfo { FileName = @"C:\Program Files (x86)\Internet Explorer\iexplore.exe", Arguments = url, UseShellExecute = false, CreateNoWindow = true }; Process.Start(processStartInfo); } else { if (MessageBox.Show(@"系统未安装IE浏览器,是否下载安装?", null, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { // 打开下载链接,从微软官网下载 OpenDefaultBrowserUrl("http://windows.microsoft.com/zh-cn/internet-explorer/download-ie"); } } } } catch (Exception exception) { MessageBox.Show(exception.Message); } } } /// <summary> /// 打开系统默认浏览器(用户自己设置了默认浏览器) /// </summary> /// <param name="url"></param> public static void OpenDefaultBrowserUrl(string url) { try { // 方法1 //从注册表中读取默认浏览器可执行文件路径 RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command\"); if (key != null) { string s = key.GetValue("").ToString(); //s就是你的默认浏览器,不过后面带了参数,把它截去,不过需要注意的是:不同的浏览器后面的参数不一样! //"D:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -- "%1" var lastIndex = s.IndexOf(".exe", StringComparison.Ordinal); if (lastIndex == -1) { lastIndex = s.IndexOf(".EXE", StringComparison.Ordinal); } var path = s.Substring(1, lastIndex + 3); var result = Process.Start(path, url); if (result == null) { // 方法2 // 调用系统默认的浏览器 var result1 = Process.Start("explorer.exe", url); if (result1 == null) { // 方法3 Process.Start(url); } } } else { // 方法2 // 调用系统默认的浏览器 var result1 = Process.Start("explorer.exe", url); if (result1 == null) { // 方法3 Process.Start(url); } } } catch { OpenIe(url); } } /// <summary> /// 火狐浏览器打开网页 /// </summary> /// <param name="url"></param> public static void OpenFireFox(string url) { try { // 64位注册表路径 var openKey = @"SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox"; if (IntPtr.Size == 4) { // 32位注册表路径 openKey = @"SOFTWARE\Mozilla\Mozilla Firefox"; } RegistryKey appPath = Registry.LocalMachine.OpenSubKey(openKey); if (appPath != null) { var result = Process.Start("firefox.exe", url); if (result == null) { OpenIe(url); } } else { var result = Process.Start("firefox.exe", url); if (result == null) { OpenDefaultBrowserUrl(url); } } } catch { OpenDefaultBrowserUrl(url); } } } }点击复制复制失败已复制
使用示例
BrowserHelper.OpenBrowserUrl("https://cloud