我想知道是否有可能使用c#获取计算机上安装的浏览器列表? 我在我的任务中使用Selenium WebDriver,我需要知道安装了哪些浏览器,因为在Selenium中我只能运行特定的浏览器,例如对于Firefox,它将是:
IWebDriver driver = new FirefoxDriver();
我将不胜感激。
答案 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/