WinUI应用通过URI启动时ActivationKind始终为Launch,参数为空求助
WinUI应用URI启动参数为空问题排查
错误的激活处理入口
WinUI 3应用的协议激活(对应ActivationKind.Protocol)不会触发OnLaunched方法,而是走OnActivated回调。你当前仅在OnLaunched里判断激活类型,自然捕获不到协议激活场景,所以拿到的ActivationKind始终是Launch,参数也为空。正确的代码实现方式
- 重写
OnActivated方法来处理协议激活:
protected override void OnActivated(IActivatedEventArgs args) { if (args.Kind == ActivationKind.Protocol) { var protocolArgs = args as ProtocolActivatedEventArgs; // 获取完整URI,包含查询参数 var activatedUri = protocolArgs.Uri; // 解析查询参数,例如提取variable的值 var queryParams = System.Web.HttpUtility.ParseQueryString(activatedUri.Query); string variableValue = queryParams["variable"]; // 这里添加参数处理逻辑 } // 复用窗口初始化逻辑,和OnLaunched保持一致 InitializeApplicationWindow(); }
- 抽离窗口初始化逻辑,避免
OnLaunched和OnActivated重复代码:
把OnLaunched里的窗口创建、激活等逻辑封装成独立方法(比如InitializeApplicationWindow),在两个回调中都调用该方法,保证应用启动状态一致。
验证URI协议注册正确性
检查项目的Package.appxmanifest是否正确配置了协议:打开
Package.appxmanifest,切换到「声明」标签页添加「协议」声明,填写协议名称(需和你使用的
myapp://前缀中的myapp一致)、显示名称等信息保存后重新部署应用
覆盖所有激活场景
无论应用是从冷启动还是后台唤醒,协议激活都会触发OnActivated,因此必须在该方法中处理参数,才能覆盖所有使用URI启动的场景。
内容的提问来源于stack exchange,提问作者llywelyn
相关产品推荐
相关产品推荐

