MAUI Windows自定义URI注册异常:Deep Link无法获取URI
Windows MAUI自定义URI激活异常的解决办法
检查应用清单配置是否正确
确保Package.appxmanifest里的协议扩展配置层级和格式完全合规,正确示例如下:
<Applications> <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$"> <Extensions> <!-- 自定义URI协议扩展 --> <uap:Extension Category="windows.protocol"> <uap:Protocol Name="daily-co"> <uap:DisplayName>Daily CO 协议</uap:DisplayName> </uap:Protocol> </uap:Extension> </Extensions> </Application> </Applications>
核心注意点:
Name属性仅填写协议名(如daily-co),不要带://后缀- 扩展节点必须嵌套在
<Application>下的<Extensions>内,不能放错层级
修正Windows激活事件处理逻辑
在MauiProgram.cs中,需要精准判断激活类型并从对应参数中提取URI,替换原有代码为:
builder.ConfigureLifecycleEvents(events => { #if WINDOWS events.AddWindows(wndLifeCycleBuilder => { wndLifeCycleBuilder.OnActivated((app, args) => { // 判定是否为协议激活 if (args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Protocol) { var protocolArgs = args as Windows.ApplicationModel.Activation.ProtocolActivatedEventArgs; if (protocolArgs != null) { // 获取激活URI并处理 var activatedUri = protocolArgs.Uri.AbsoluteUri; System.Diagnostics.Debug.WriteLine($"激活URI: {activatedUri}"); // 此处可添加导航到对应页面的逻辑 } } // 保留常规启动的处理逻辑(如有需要) else if (args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Launch) { // 常规启动执行代码 } }); }); #endif });
验证配置的关键操作
- 完全卸载旧版本应用后重新部署,避免系统缓存旧的协议配置
- 使用标准格式测试URI:
daily-co://test/path,确保协议名后带:// - 命令行验证系统注册:运行
reg query HKEY_CLASSES_ROOT\daily-co,确认存在URL Protocol键值
排查激活类型异常的额外步骤
- 重启电脑后再测试,部分场景下系统协议注册需重启生效
- 检查是否有其他应用注册了相同协议名,导致冲突
内容的提问来源于stack exchange,提问作者Natash Dimas
相关产品推荐
相关产品推荐

