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

问题描述:

我想知道是否有任何可能使用c#获得已安装浏览器的列表在计算机上? 我在我的任务使用Selenium的webdriver,我需要知道的安装,因为硒我只能运行特定的浏览器,浏览器,例如Firefox的将是:获取计算机上已安装浏览器的列表

IWebDriver driver = new FirefoxDriver(); 

我会感谢所有帮助。

+2

你在说什么平台呢?视窗?其他?没有什么说“你好,我是网络浏览器”。您需要有一个定义的列表,并只需搜索这些安装。 –

+0

@ rory.ap only Windows – Zirochka

+0

查找安装的浏览器的一种方法是通过注册表查看已注册的已安装应用程序,这为您在添加和删除程序/程序和功能中看到的列表提供支持。 –

看LOCALMACHINE注册表...

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

非常感谢,它的工作原理,至少在我的电脑:) – Zirochka

+0

高兴地帮助:) ofcourse您的应用程序需要在管理员权限下运行... – caner

据我所知在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 
} 

您还需要考虑到机器体系结构(x64与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; } 
}