You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:05:33