获取计算机上已安装浏览器的列表

时间:2017-04-26 11:41:13

标签: c#

我想知道是否有可能使用c#获取计算机上安装的浏览器列表? 我在我的任务中使用Selenium WebDriver,我需要知道安装了哪些浏览器,因为在Selenium中我只能运行特定的浏览器,例如对于Firefox,它将是:

IWebDriver driver = new FirefoxDriver();

我将不胜感激。

4 个答案:

答案 0 :(得分:5)

查看localmachine注册表...

Microsoft.Win32.RegistryKey key =           
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet");
var browsers = key.GetSubKeyNames();

答案 1 :(得分:3)

您还需要考虑计算机体系结构(x64 vs x86)以及Microsoft Edge不在指定密钥下的事实。以下是我最终使用的内容(基于在线找到的多种解决方案):

private List<Browser> GetBrowsers()
    {
        RegistryKey browserKeys;
        browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet");
        if (browserKeys == null)
            browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet");
        string[] browserNames = browserKeys.GetSubKeyNames();
        List<Browser> browsers = new List<Browser>();
        for (int i = 0; i < browserNames.Length; i++)
        {
            Browser browser = new Browser();
            RegistryKey browserKey = browserKeys.OpenSubKey(browserNames[i]);
            browser.Name = (string)browserKey.GetValue(null);
            RegistryKey browserKeyPath = browserKey.OpenSubKey(@"shell\open\command");
            browser.Path = browserKeyPath.GetValue(null).ToString().StripQuotes();
            browsers.Add(browser);
            if (browser.Path != null)
                browser.Version = FileVersionInfo.GetVersionInfo(browser.Path).FileVersion;
            else
                browser.Version = "unknown";
        }

        Browser edgeBrowser = GetEdgeVersion();
        if (edgeBrowser != null)
        {
            browsers.Add(edgeBrowser);
        }
        return browsers;
    }

    private Browser GetEdgeVersion()
    {
        RegistryKey edgeKey =
            Registry.CurrentUser.OpenSubKey(
                @"SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\Schemas");
        if (edgeKey != null)
        {
            string version = edgeKey.GetValue("PackageFullName").ToString().StripQuotes();
            Match result = Regex.Match(version, "(((([0-9.])\\d)+){1})");
            if (result.Success)
            {
                return new Browser
                {
                    Name = "MicrosoftEdge",
                    Version = result.Value
                };
            }
        }
        return null;
    }

返回的对象是一个简单的DTO:

public class Browser{
     public string Name { get; set; }
     public string Path { get; set; }
     public string Version { get; set; }
}

答案 2 :(得分:0)

据我所知,Windows中没有浏览器列表。

但是,您可以通过简单地测试* .exe文件的存在来检查浏览器是否存在:

if (File.Exists(@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe") || 
    File.Exists(@"C:\Program Files\Google\Chrome\Application\chrome.exe")) {
    // chrome is installed
}

if (File.Exists(@"C:\Program Files (x86)\Mozilla Firefox\firefox.exe") ||
    File.Exists(@"C:\Program Files\Mozilla Firefox\firefox.exe") {
   // firefox is installed
}

答案 3 :(得分:-1)

我为此编写了一个NuGet包: https://www.nuget.org/packages/MintPlayer.PlatformBrowser/定位到.net核心。

您可以获得所有已安装的Web浏览器(包括Edge)和默认Web浏览器的列表。我还编写了一个带有对话框的软件包,让您选择浏览器:https://www.nuget.org/packages/MintPlayer.BrowserDialog/