我想知道是否有可能使用C#获取计算机上安装的浏览器列表?
我在我的任务中使用Selenium WebDriver,需要知道哪些浏览器已安装,因为在Selenium中我只能运行特定的浏览器,例如对于Firefox,它将是:
IWebDriver driver = new FirefoxDriver();
我会感激任何帮助。
IWebDriver driver = new FirefoxDriver();
我会感激任何帮助。
你还需要考虑机器架构(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; }
}
GetEdgeVersion
填充了Name
和Version
但未填充Path
。 - Andrew Truckle查看本地机器注册表...
Microsoft.Win32.RegistryKey key =
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet");
var browsers = key.GetSubKeyNames();
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
}