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

23

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


你是从哪个角度来看待这个问题的,是一个Windows Forms应用程序? - Nick Craver
我正在寻找制作一个能够实现这个功能的库,控制台应用程序可以胜任。 - Pranali Desai
看起来你在Windows平台下已经得到了一个好的答案。在非Windows方面,我会构建一个强大的最小公倍数Bourne shell脚本,它将检查操作系统类型/分发、检查相关的软件包管理器、检查二进制文件的文件系统等等。如果能够从远程站点wget你的脚本就太好了,但是在许多Unix平台上并不能保证有wget。 - Wedge Martin
5个回答

31

一次快速的谷歌搜索给我提供了在Windows XP和Vista中找到所有已安装浏览器的方法

在我所开发的应用程序中,我需要查找用户计算机上安装的所有浏览器。最好的方法是在注册表中查找HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet下的信息,因为根据这篇MSDN文章,这是告诉浏览器制造商放置他们信息的位置。


7
对我来说,快速谷歌搜索给了我这篇帖子 ;-) 谢谢您的发帖! +1 - Josh Stribling
3
但是我遇到了一个问题:在64位系统上,这些键会被写入到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Clients\StartMenuInternet。 - SepehrM
除了Microsoft Edge以外。由于它是Windows 10中的默认浏览器,这给我带来了一些问题,因为上面提到的注册表键具有当前默认设置为iexplor.exe(IE 11),但实际上并不是。 - BeanFlicker

5
一个简短的回答:
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
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List<ViewerApplication> viewers = new List<ViewerApplication>();
            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:

<Window x:Class="WpfApplication94.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <ListView x:Name="listView">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Button Tag="{Binding}" Click="Button_Click">
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding ImageSource}" />
                            <TextBlock Text="{Binding Name}" />
                        </StackPanel>
                    </Button>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
</Window>

结果:

在此输入图片描述

(注:该图片无法翻译,因为它是一张图片。)

对于像我这样的初学者,要运行此程序,我必须在Visual Studio中创建一个新的WPF项目,并按照https://dev59.com/sWgu5IYBdhLWcg3wEzDP#62390032进行操作,然后运行。 - Phani Rithvij

5
Necromancing,由于提供的答案不完整。
首先:
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet.

如果你只是使用这种方法,无法兼容所有浏览器。

如果你在公司环境中,用户将没有管理员权限。如果Google Chrome和/或Chromium以这种方式安装(不知道FF是否也是这样),那么密钥只会在HK_Current_User中。

此外,这并不涵盖非Windows操作系统。你需要编写详细的代码来确定和覆盖Linux和Mac系统上的所有软件包管理系统。

以下是Windows和基于Debian的Linux的代码:

PlatformInfo:

using System.Diagnostics;


namespace PlatformInfo
{

    public delegate int BrowserRatingCallback_t(string packageName);


    public class BrowserInfo : System.IComparable<BrowserInfo>
    {
        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<BrowserInfo> GetPreferableBrowser()
        {
            return GetPreferableBrowser(BrowserInfo.DefaultBrowserRating);
        }


        public static System.Collections.Generic.List<BrowserInfo> 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<BrowserInfo>();
        }


    } // End Class BrowserInfo : System.IComparable<BrowserInfo> 



    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<BrowserInfo> GetInstalledBrowsers()
        {
            return GetInstalledBrowsers(BrowserInfo.DefaultBrowserRating);
        } // End Function GetInstalledBrowsers


        public static System.Collections.Generic.List<BrowserInfo> GetInstalledBrowsers(BrowserRatingCallback_t browserRatingCallback )
        {

            System.Collections.Generic.List<BrowserInfo> ls = new System.Collections.Generic.List<BrowserInfo>();
            System.Collections.Generic.List<string> 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<string> GetPossibleBrowsers()
        {
            return SearchPackages("www-browser");
        } // End Function GetPossibleBrowsers 


        public static System.Collections.Generic.List<string> SearchPackages(string categoryName)
        {
            System.Collections.Generic.List<string> ls = new System.Collections.Generic.List<string>();

            Process process = new Process();  // e.g. 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<BrowserInfo> GetPreferableBrowser(BrowserRatingCallback_t browserRatingCallback)
        {
            System.Collections.Generic.List<BrowserInfo> ls = new System.Collections.Generic.List<BrowserInfo>();
            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<PlatformInfo.BrowserInfo> 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 

嗨,斯特凡,你能否添加一些代码行以获取默认浏览器?谢谢。 - Mrityunjay
默认浏览器很简单:只需将URL作为进程打开即可。在Linux上,这将需要安装gvfs——通常情况下,在桌面Linux上它已经安装了。 - Stefan Steiger

4

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


2
+1 是一个选项,记得也扫描64位程序文件。 - JL.

3

这个解决方案对我来说似乎有效:

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接