如何获取Linux机器上已安装的浏览器列表(基于.NET 6)
在.NET 6(C#)中获取Linux(Ubuntu优先)已安装浏览器列表的方法
Linux没有像Windows那样统一的应用注册机制,所以需要结合多种方式检测已安装的浏览器,以下是几种可行方案:
1. 检查PATH中的可执行文件
Linux中已安装的浏览器通常会在PATH目录下生成可执行文件,可通过which命令验证是否存在:
using System; using System.Collections.Generic; using System.Diagnostics; public static List<string> GetBrowsersFromExecutables() { // 常见浏览器的可执行文件名与友好名称映射 var browserMap = new Dictionary<string, string> { { "Google Chrome", "google-chrome" }, { "Mozilla Firefox", "firefox" }, { "Chromium", "chromium-browser" }, { "Brave Browser", "brave-browser" }, { "Microsoft Edge", "microsoft-edge" }, { "Opera", "opera" } }; var installedBrowsers = new List<string>(); foreach (var (name, executable) in browserMap) { using var process = new Process { StartInfo = new ProcessStartInfo { FileName = "which", Arguments = executable, RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true } }; process.Start(); var output = process.StandardOutput.ReadToEnd().Trim(); process.WaitForExit(); if (!string.IsNullOrEmpty(output)) { installedBrowsers.Add(name); } } return installedBrowsers; }
2. 读取桌面入口(.desktop)文件
Linux桌面应用通过.desktop文件注册,这类文件通常位于/usr/share/applications(系统级)或~/.local/share/applications(用户级),包含Categories=WebBrowser字段的即为浏览器:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.RegularExpressions; public static List<string> GetBrowsersFromDesktopFiles() { var desktopPaths = new List<string> { "/usr/share/applications", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local/share/applications") }; var installedBrowsers = new HashSet<string>(); // 自动去重 var categoryRegex = new Regex(@"Categories=.*WebBrowser.*", RegexOptions.IgnoreCase); var nameRegex = new Regex(@"Name=(.*)", RegexOptions.IgnoreCase); foreach (var path in desktopPaths) { if (!Directory.Exists(path)) continue; foreach (var file in Directory.GetFiles(path, "*.desktop")) { var content = File.ReadAllText(file); if (!categoryRegex.IsMatch(content)) continue; var nameMatch = nameRegex.Match(content); if (nameMatch.Success) { var browserName = nameMatch.Groups[1].Value.Trim(); installedBrowsers.Add(browserName); } } } return installedBrowsers.ToList(); }
3. 针对Ubuntu/Debian系使用APT包管理器查询
如果仅适配Ubuntu等Debian衍生发行版,可通过APT命令直接查询已安装的浏览器包:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; public static List<string> GetBrowsersFromApt() { using var process = new Process { StartInfo = new ProcessStartInfo { FileName = "bash", Arguments = "-c \"apt list --installed | grep -E '(chrome|firefox|chromium|brave|edge|opera)'\"", RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true } }; process.Start(); var output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); var installedBrowsers = new List<string>(); var lines = output.Split('\n', StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { var packageName = line.Split('/')[0]; // 映射为友好名称 var friendlyName = packageName switch { "google-chrome-stable" => "Google Chrome", "firefox" => "Mozilla Firefox", "chromium-browser" => "Chromium", "brave-browser" => "Brave Browser", "microsoft-edge-stable" => "Microsoft Edge", "opera-stable" => "Opera", _ => packageName }; installedBrowsers.Add(friendlyName); } return installedBrowsers.Distinct().ToList(); }
推荐方案
为覆盖更多场景,建议结合桌面文件读取和可执行文件检查两种方法,既可以找到所有注册的桌面浏览器,也能补充检测未注册但可执行的浏览器。
内容的提问来源于stack exchange,提问作者Niyozbek Mirzayev
相关产品推荐
相关产品推荐

