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

C#使用Process.Start强制在默认浏览器打开本地PDF文件

问题原因说明

首先对应你的两个疑问给出明确结论:

  • 该现象确实和设备上PDF后缀的默认关联程序有关:你传入file:///协议的PDF路径时,系统底层会优先识别.pdf后缀的默认打开程序,若安装了第三方PDF阅读器并接管了PDF格式关联,就会启动阅读器而非浏览器。
  • 若设备未安装任何第三方PDF阅读器,且系统默认浏览器开启了内置PDF预览能力(主流现代浏览器均默认支持),此时直接传file:///前缀的路径才会调用浏览器打开。
强制默认浏览器打开PDF的实现方案

核心逻辑是绕开系统按PDF后缀匹配关联程序的规则,先读取系统默认浏览器的安装路径,再将PDF的合法file协议URI作为启动参数传入浏览器进程。

完整实现代码(.NET Framework WPF 环境可用)

using Microsoft.Win32;
using System.Diagnostics;
using System.IO;

// 构造PDF的file协议URI(自动处理空格、中文、斜杠转换,无需手动替换)
string pdfLocalPath = @"C:\My Folder\My PDF file.pdf";
Uri pdfFileUri = new Uri(pdfLocalPath);
string pdfBrowserUrl = pdfFileUri.AbsoluteUri; // 自动输出标准file:///开头的编码后路径

// 启动默认浏览器打开该URI
Process.Start(GetDefaultBrowserPath(), pdfBrowserUrl);

// 获取系统默认浏览器路径的方法
private static string GetDefaultBrowserPath()
{
    string userChoicePath = @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice";
    using (RegistryKey userChoiceKey = Registry.CurrentUser.OpenSubKey(userChoicePath))
    {
        // 兜底逻辑,可根据需求修改为其他浏览器的启动名
        if (userChoiceKey == null) return "chrome.exe"; 
        
        string browserProgId = userChoiceKey.GetValue("ProgId").ToString();
        using (RegistryKey openCmdKey = Registry.ClassesRoot.OpenSubKey($@"{browserProgId}\shell\open\command"))
        {
            string cmdValue = openCmdKey.GetValue(null).ToString().ToLower().Replace("\"", "");
            // 提取exe路径,排除后续启动参数
            if (cmdValue.EndsWith(".exe")) return cmdValue;
            return cmdValue.Substring(0, cmdValue.LastIndexOf(".exe") + 4);
        }
    }
}

额外说明

  • 上述实现不受第三方PDF阅读器的安装影响,始终会调用系统默认浏览器打开PDF
  • 若需指定特定浏览器打开,可直接传入对应浏览器的exe路径替换GetDefaultBrowserPath()的返回值即可,例如固定用Edge打开可写为Process.Start(@"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe", pdfBrowserUrl)

内容的提问来源于stack exchange,提问作者Jeronymite

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:54:04