2017-04-26 11 views
1

私はC#を使用してコンピュータにインストールされているブラウザのリストを取得する可能性はありますか? 私は私の仕事でセレンwebdriverをを使用していると私は私が唯一の特定のブラウザを実行することができますので、セレンにインストールされているブラウザを知る必要があり、Firefoxのための例えば、それは次のようになります。私は、任意の助けを感謝しますコンピュータにインストールされているブラウザのリストを取得する

IWebDriver driver = new FirefoxDriver(); 

+2

について、あなたは何プラットフォームを話していますか? Windows?その他? 「こんにちは、私はウェブブラウザです」とは何も言いません。あなたは定義されたリストを持っていて、それらのインストールだけを検索する必要があります。 –

+0

@ rory.apのみWindows – Zirochka

+0

インストールされているブラウザを見つける1つの方法は、登録されているインストール済みアプリケーションのレジストリを調べ、プログラムと機能の追加と削除で表示されるリストにアクセスすることです。 –

答えて

3

ルックを...

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

ありがとう、それは、少なくとも私のコンピュータ上で動作します:) – Zirochka

+0

あなたのアプリの管理者権限の下で実行する必要があります:) ofcourse助けて嬉しいです... – caner

0

私の知る限り、Windowsにはブラウザのリストはありません。

あなたは、単に* .exeファイルの存在をテストすることによって、ブラウザの存在を確認することができしかし

:あなたはまた、考慮に入れる必要があるLOCALMACHINEレジストリで

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 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; } 
} 
関連する問題