2017-04-26 74 views
1

我想知道是否有任何可能使用c#獲得已安裝瀏覽器的列表在計算機上? 我在我的任務使用Selenium的webdriver,我需要知道的安裝,因爲硒我只能運行特定的瀏覽器,瀏覽器,例如Firefox的將是:獲取計算機上已安裝瀏覽器的列表

IWebDriver driver = new FirefoxDriver(); 

我會感謝所有幫助。

+2

你在說什麼平臺呢?視窗?其他?沒有什麼說「你好,我是網絡瀏覽器」。您需要有一個定義的列表,並只需搜索這些安裝。 –

+0

@ rory.ap only Windows – Zirochka

+0

查找安裝的瀏覽器的一種方法是通過註冊表查看已註冊的已安裝應用程序,這爲您在添加和刪除程序/程序和功能中看到的列表提供支持。 –

回答

3

看LOCALMACHINE註冊表...

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

非常感謝,它的工作原理,至少在我的電腦:) – Zirochka

+0

高興地幫助:) ofcourse您的應用程序需要在管理員權限下運行... – caner

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 
} 
0

您還需要考慮到機器體系結構(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; } 
} 
相關問題