如何查找计算机上安装的所有浏览器

如何找到计算机上安装的所有浏览器及其详细信息。

快速谷歌搜索让我在Windows XP和Vista中查找所有已安装的浏览器

在我一直在研究的应用程序中,我需要找到用户机器上安装的所有浏览器。 解决此问题的最佳方法是在HKEY_LOCAL_MACHINE \ SOFTWARE \ Clients \ StartMenuInternet下查看注册表。 根据这篇MSDN文章 ,这是浏览器制造商告知他们提供信息的地方。

扫描Program Files文件夹的内容,查找已知浏览器可执行文件的文件名。

这个解决方案似乎对我有用:

RegistryKey browserKeys; //on 64bit the browsers are in a different location browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet"); if (browserKeys == null) browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); string[] browserNames = browserKeys.GetSubKeyNames(); 

享受编码! Chagbert。

一个简短的回答:

 using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)) { RegistryKey webClientsRootKey = hklm.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); if (webClientsRootKey != null) foreach (var subKeyName in webClientsRootKey.GetSubKeyNames()) if (webClientsRootKey.OpenSubKey(subKeyName) != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command") != null) { string commandLineUri = (string)webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(null); //your turn } } 

用于启动所有已安装浏览器的应用程序(WPF)的简单示例:

CS:

 using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Microsoft.Win32; namespace WpfApplication94 { ///  /// Interaction logic for MainWindow.xaml ///  public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); List viewers = new List(); using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)) { RegistryKey webClientsRootKey = hklm.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); if (webClientsRootKey != null) foreach (var subKeyName in webClientsRootKey.GetSubKeyNames()) if (webClientsRootKey.OpenSubKey(subKeyName) != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command") != null) { string commandLineUri = (string)webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(null); if (string.IsNullOrEmpty(commandLineUri)) continue; commandLineUri = commandLineUri.Trim("\"".ToCharArray()); ViewerApplication viewer = new ViewerApplication(); viewer.Executable = commandLineUri; viewer.Name = (string)webClientsRootKey.OpenSubKey(subKeyName).GetValue(null); viewers.Add(viewer); } } this.listView.ItemsSource = viewers; } private void Button_Click(object sender, RoutedEventArgs e) { Process.Start(((sender as Control).Tag as ViewerApplication).Executable, @"http://news.google.de"); } } public class ViewerApplication { public string Name { get; set; } public string Executable { get; set; } public Icon Icon { get { return System.Drawing.Icon.ExtractAssociatedIcon(this.Executable); } } public ImageSource ImageSource { get { ImageSource imageSource; using (Bitmap bmp = Icon.ToBitmap()) { var stream = new MemoryStream(); bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png); imageSource = BitmapFrame.Create(stream); } return imageSource; } } } } 

XAML:

          

结果:

在此处输入图像描述

Necromancing,因为提供的答案是不完整的。

第一:

 HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet. 

不会得到你所有的浏览器。

如果您在公司环境中,则该用户将没有管理员权限。 如果谷歌Chrome和/或Chromium以这种方式安装(不知道FF是否像这样工作),那么密钥将只在HK_Current_User中。

此外,这不包括非Windows操作系统。 您需要精心设计的代码来确定并涵盖Linux + Mac系统上的所有软件包管理系统。

这里是基于Windows + Debian的Linuces的代码

PlatformInfo:

 using System.Diagnostics; namespace PlatformInfo { public delegate int BrowserRatingCallback_t(string packageName); public class BrowserInfo : System.IComparable { public string Name; public string Path; public int Preference; public int CompareTo(BrowserInfo other) { if (this == null || other == null) return 0; int pref = this.Preference.CompareTo(other.Preference); if (pref != 0) return pref; return string.Compare(this.Name, other.Name, true); } // End Function CompareTo public static int DefaultBrowserRating(string packageName) { if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Google")) return 1; if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Chromium")) return 2; if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Opera")) return 3; if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Firefox")) return 4; if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Midori")) return 5; if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Safari")) return 9000; if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Edge")) return 9998; if (EmbeddedWebServer.StringHelpers.Contains(packageName, "Explorer")) return 9999; return 9997; } public static System.Collections.Generic.List GetPreferableBrowser() { return GetPreferableBrowser(BrowserInfo.DefaultBrowserRating); } public static System.Collections.Generic.List GetPreferableBrowser(BrowserRatingCallback_t browserRatingCallback) { if (System.Environment.OSVersion.Platform != System.PlatformID.Unix) return Win.GetPreferableBrowser(browserRatingCallback); // ELSE: Linux / Unix / MacOS if (DistroInfo.PackageManager == DistroInfo.PackageManager_t.dpkg) return dpkg.GetInstalledBrowsers(browserRatingCallback); return new System.Collections.Generic.List(); } } // End Class BrowserInfo : System.IComparable public class DistroInfo { public enum Distro_t : int { Debian ,Ubuntu ,Mint ,Arch ,Gentoo ,CentOS ,Fedora ,RedHat ,Mageia ,Suse ,Mandrake ,YellowDog ,Slackware ,SunJDS ,Solaris ,UnitedLinux ,Unknown } // End Enum Distro_t public enum PackageManager_t : int { dpkg ,rpm ,portage ,pacman ,pkgtool ,ips ,unknown } // End Enum PackageManager_t public enum DistroFamily_t : int { Debian, RedHat, Unknown } // End Enum DistroFamily_t public static DistroFamily_t DistroFamily { get { if (Distro == Distro_t.Ubuntu) return DistroFamily_t.Debian; if (Distro == Distro_t.Debian) return DistroFamily_t.Debian; if (Distro == Distro_t.Mint) return DistroFamily_t.Debian; if (Distro == Distro_t.RedHat) return DistroFamily_t.RedHat; if (Distro == Distro_t.CentOS) return DistroFamily_t.RedHat; if (Distro == Distro_t.Fedora) return DistroFamily_t.RedHat; if (Distro == Distro_t.Suse) return DistroFamily_t.RedHat; if (Distro == Distro_t.Mageia) return DistroFamily_t.RedHat; if (Distro == Distro_t.Mandrake) return DistroFamily_t.RedHat; if (Distro == Distro_t.YellowDog) return DistroFamily_t.RedHat; return DistroFamily_t.Unknown; } } // End Property DistroFamily public static PackageManager_t PackageManager { get { if (DistroFamily == DistroFamily_t.Debian) return PackageManager_t.dpkg; if (DistroFamily == DistroFamily_t.RedHat) return PackageManager_t.rpm; if(Distro == Distro_t.Arch) return PackageManager_t.pacman; if(Distro == Distro_t.Gentoo) return PackageManager_t.portage; if(Distro == Distro_t.Slackware) return PackageManager_t.pkgtool; if(Distro == Distro_t.Solaris) return PackageManager_t.ips; if(Distro == Distro_t.SunJDS) return PackageManager_t.ips; return PackageManager_t.unknown; } } // End Property PackageManager // Release Files in /etc (from Unix.com) // Novell SuSE---> /etc/SuSE-release // Red Hat--->/etc/redhat-release, /etc/redhat_version // Fedora-->/etc/fedora-release // Slackware--->/etc/slackware-release, /etc/slackware-version // Old Debian--->/etc/debian_release, /etc/debian_version // New Debian--->/etc/os-release // Mandrake--->/etc/mandrake-release // Yellow dog-->/etc/yellowdog-release // Sun JDS--->/etc/sun-release // Solaris/Sparc--->/etc/release // Gentoo--->/etc/gentoo-release // cat /etc/issue // CentOS Linux release 6.0 (Final) // Kernel \r on an \m // cat /proc/version // uname -a // If you are in a container, beware cat /proc/version will give the host distro, not the container one. // http://unix.stackexchange.com/questions/35183/how-do-i-identify-which-linux-distro-is-running public static Distro_t Distro { get{ string issue = null; if (System.IO.File.Exists("/etc/issue")) issue = System.IO.File.ReadAllText("/etc/issue", System.Text.Encoding.UTF8); if (EmbeddedWebServer.StringHelpers.Contains(issue, "Ubuntu")) return Distro_t.Ubuntu; if (System.IO.File.Exists("/etc/os-release")) return Distro_t.Debian; // New Debian if (System.IO.File.Exists("/etc/debian_release")) return Distro_t.Debian; // Old Debian if (System.IO.File.Exists("/etc/gentoo-release")) return Distro_t.Gentoo; // Not yet supported if (System.IO.File.Exists("/etc/SuSE-release")) return Distro_t.Suse; if (EmbeddedWebServer.StringHelpers.Contains(issue, "CentOS")) return Distro_t.CentOS; if (System.IO.File.Exists("/etc/fedora-release")) return Distro_t.Fedora; if (System.IO.File.Exists("/etc/redhat_version")) return Distro_t.Fedora; // Unsupported if (System.IO.File.Exists("/etc/mandrake-release")) return Distro_t.Mandrake; if (System.IO.File.Exists("/etc/slackware-release")) return Distro_t.Slackware; if (System.IO.File.Exists("/etc/yellowdog-release")) return Distro_t.YellowDog; if (System.IO.File.Exists("/etc/yellowdog-release")) return Distro_t.YellowDog; if (System.IO.File.Exists("/etc/sun-release")) return Distro_t.SunJDS; if (System.IO.File.Exists("/etc/release")) return Distro_t.Solaris; if (System.IO.File.Exists("/etc/UnitedLinux-release")) return Distro_t.Solaris; return Distro_t.Unknown; } // End Get } // End Property Distro } // End Class DistroInfo public class dpkg { public static bool HasDPKG() { // if (System.IO.File.Exists("/usr/bin/dpkg")) return true; if (DistroInfo.PackageManager == DistroInfo.PackageManager_t.dpkg) return true; return false; } // End Function HasDPKG public static bool IsPackageInstalled(string packageName) { Process process = new Process(); process.StartInfo.FileName = "dpkg"; process.StartInfo.Arguments = "-s \"" + packageName + "\""; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; process.Start(); process.WaitForExit(); int result = process.ExitCode; if (result == 0) return true; return false; } // End Function IsPackageInstalled public static string GetExecutable(string packageName) { Process process = new Process(); process.StartInfo.FileName = "dpkg"; process.StartInfo.Arguments = "-L \"" + packageName + "\""; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); //* Read the output (or the error) string output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); if (output != null) output = output.Replace("\r", "\n"); string[] lines = output.Split(new char[] { '\n' }, System.StringSplitOptions.RemoveEmptyEntries); string executable = null; foreach (string line in lines) { if (line.IndexOf("/bin/") != -1) { executable = line; break; } } return executable; } // End Function GetExecutable public static System.Collections.Generic.List GetInstalledBrowsers() { return GetInstalledBrowsers(BrowserInfo.DefaultBrowserRating); } // End Function GetInstalledBrowsers public static System.Collections.Generic.List GetInstalledBrowsers(BrowserRatingCallback_t browserRatingCallback ) { System.Collections.Generic.List ls = new System.Collections.Generic.List(); System.Collections.Generic.List packageList = GetPossibleBrowsers(); foreach (string packageName in packageList) { if (IsPackageInstalled(packageName)) { int sort = browserRatingCallback(packageName); ls.Add(new BrowserInfo() { Name = packageName ,Path = GetExecutable(packageName) ,Preference = sort }); } // End if (isPackageInstalled(packageName)) } // Next packageName ls.Sort(); return ls; } // End Function GetInstalledBrowsers public static System.Collections.Generic.List GetPossibleBrowsers() { return SearchPackages("www-browser"); } // End Function GetPossibleBrowsers public static System.Collections.Generic.List SearchPackages(string categoryName) { System.Collections.Generic.List ls = new System.Collections.Generic.List(); Process process = new Process(); // eg apt-cache search www-browser process.StartInfo.FileName = "apt-cache"; process.StartInfo.Arguments = "search \"" + categoryName + "\""; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; process.Start(); //* Read the output (or the error) string output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); if (output != null) output = output.Replace("\r", "\n"); string[] lines = output.Split(new char[] { '\n' }, System.StringSplitOptions.RemoveEmptyEntries); foreach (string line in lines) { if (string.IsNullOrEmpty(line)) continue; int pos = line.IndexOf(" "); if (pos < 0) continue; string packageName = line.Substring(0, pos); ls.Add(packageName); } // Next line return ls; } // End Function SearchPackages } // End Class dpkg public class Win { public static System.Collections.Generic.List GetPreferableBrowser(BrowserRatingCallback_t browserRatingCallback) { System.Collections.Generic.List ls = new System.Collections.Generic.List(); if (System.Environment.OSVersion.Platform == System.PlatformID.Unix) return ls; using (Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine) { Microsoft.Win32.RegistryKey webClientsRootKey = hklm.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); if (webClientsRootKey != null) foreach (var subKeyName in webClientsRootKey.GetSubKeyNames()) if (webClientsRootKey.OpenSubKey(subKeyName) != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command") != null) { string commandLineUri = (string)webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(null); if (string.IsNullOrEmpty(commandLineUri)) continue; commandLineUri = commandLineUri.Trim("\"".ToCharArray()); // viewer.Executable = commandLineUri; string Name = (string)webClientsRootKey.OpenSubKey(subKeyName).GetValue(null); ls.Add(new BrowserInfo() { Name = Name , Path = commandLineUri , Preference = browserRatingCallback(Name) }); } } // End Using using (Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.CurrentUser) { Microsoft.Win32.RegistryKey webClientsRootKey = hklm.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); if (webClientsRootKey != null) foreach (var subKeyName in webClientsRootKey.GetSubKeyNames()) if (webClientsRootKey.OpenSubKey(subKeyName) != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open") != null) if (webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command") != null) { string commandLineUri = (string)webClientsRootKey.OpenSubKey(subKeyName).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(null); if (string.IsNullOrEmpty(commandLineUri)) continue; commandLineUri = commandLineUri.Trim("\"".ToCharArray()); // viewer.Executable = commandLineUri; string Name = (string)webClientsRootKey.OpenSubKey(subKeyName).GetValue(null); ls.Add(new BrowserInfo() { Name = Name , Path = commandLineUri , Preference = browserRatingCallback(Name) }); } } // End Using ls.Sort(); return ls; } // End Function GetPreferableBrowser } public class rpm { public rpm() { throw new System.NotImplementedException("TODO"); } // # rpm -q --whatprovides webclient //links-graphic-2.1-0.pre11.1mdk //lynx-2.8.5-1mdk //links-2.1-0.pre13.3mdk //kdebase-common-3.2.3-134.8.101mdk //mozilla-1.7.2-12.2.101mdk //epiphany-1.2.8-4.2.101mdk //wget-1.9.1-4.2.101mdk // Another rough method is apropos // This lists unexpected results too, and misses firefox as well as konqueror, who didn't filled the man-pages correctly. //snx]->~ > apropos browser //alevt (1) - X11 Teletext browser //amrecover (8) - Amanda index database browser //elinks (1) - lynx-like alternative character mode WWW browser //gnome-moz-remote (1) - remote control of browsers. //goad-browser (1) - Graphical GOAD browser //links (1) - lynx-like alternative character mode WWW browser //LinNeighborhood (1) - an SMB Network Browser //lynx (1) - a general purpose distributed information browser for the World Wide Web //mozilla-1.5 (1) - a Web browser for X11 derived from Netscape Communicator //opera (1) - a graphical web browser //sensible-browser (1) - sensible editing, paging, and web browsing //smbtree (1) - A text based smb network browser //www (1) - the W3C Line Mode Browser. //www-browser (1) - a general purpose distributed information browser for the World Wide Web //xfhelp (1) - lauches an HTML browser to display online documentation for // "The Cholesterol Free Desktop Environment" //viewres (1x) - graphical class browser for Xt //htsserver (1) - offline browser server : copy websites to a local directory //httrack (1) - offline browser : copy websites to a local directory //webhttrack (1) - offline browser : copy websites to a local directory } // End Class RPM } // End Namespace 

串助手

 using System; using System.Collections.Generic; using System.Text; namespace EmbeddedWebServer { internal class StringHelpers { public static bool Contains(string source, string value) { if (source == null || value == null) return false; return System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(source, value, System.Globalization.CompareOptions.IgnoreCase) != -1; } } } 

这是实际用法:

 public void OpenBrowser() { System.Collections.Generic.List bi = PlatformInfo.BrowserInfo.GetPreferableBrowser(); string url = "\"" + "http://127.0.0.1:" + this.m_Port.ToString() + "/Index.htm\""; if (bi.Count > 0) { System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); psi.FileName =bi[0].Path; psi.Arguments = url; System.Diagnostics.Process.Start(psi); return; } System.Diagnostics.Process.Start(url); } // End Sub OpenBrowser