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

如何识别通过URI打开Windows MAUI应用的程序(如浏览器)

解决方案:在Windows MAUI .NET 9中唤起原浏览器打开指定URI

要实现从MAUI应用打开唤起它的同款浏览器(而非默认浏览器),需要针对Windows平台调用原生进程API,具体步骤如下:

1. 核心思路

通过获取当前MAUI应用的父进程(即唤起它的浏览器进程),直接调用该浏览器的可执行文件打开目标URI;若获取父进程失败或启动失败,则回退到默认的Launcher方式。

2. 代码实现

2.1 添加必要的NuGet包

安装System.Management包,用于获取父进程信息。

2.2 实现进程扩展方法

添加平台专属代码,用于获取当前进程的父进程:

#if WINDOWS
using System.Diagnostics;
using System.Management;

public static class ProcessExtensions
{
    public static Process? GetParentProcess(this Process process)
    {
        try
        {
            using var searcher = new ManagementObjectSearcher(
                $"SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {process.Id}");
            
            foreach (var obj in searcher.Get())
            {
                var parentId = (uint)obj["ParentProcessId"];
                if (parentId == 0) return null;
                return Process.GetProcessById((int)parentId);
            }
        }
        catch
        {
            // 捕获异常,返回null触发回退逻辑
        }
        return null;
    }
}
#endif

2.3 实现打开URI的方法

编写平台适配的方法,优先使用原浏览器打开URI:

using Microsoft.Maui.ApplicationModel;
using System.Diagnostics;

public async Task OpenInCallingBrowserAsync(string targetUri)
{
#if WINDOWS
    var currentProcess = Process.GetCurrentProcess();
    var parentProcess = currentProcess.GetParentProcess();

    if (parentProcess != null && !string.IsNullOrEmpty(parentProcess.MainModule?.FileName))
    {
        try
        {
            // 调用原浏览器进程打开目标URI
            Process.Start(new ProcessStartInfo
            {
                FileName = parentProcess.MainModule.FileName,
                Arguments = $"\"{targetUri}\"",
                UseShellExecute = false
            });
            return;
        }
        catch
        {
            // 启动失败,执行回退逻辑
        }
    }
#endif
    // 回退到默认浏览器打开
    await Launcher.Default.OpenAsync(new Uri(targetUri));
}

3. MSIX打包注意事项

如果应用采用MSIX打包,需要启用全信任权限才能使用Process.Start:

  1. 打开项目的Package.appxmanifest文件;
  2. 添加受限能力命名空间及权限:
<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="rescap">
  ...
  <Capabilities>
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
</Package>

4. 调用示例

在需要打开URI的场景中直接调用方法:

// 假设从唤起URI中解析出的目标网页地址为targetUrl
await OpenInCallingBrowserAsync(targetUrl);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 07:43:11