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

WinUI应用通过URI启动时ActivationKind始终为Launch,参数为空求助

WinUI应用URI启动参数为空问题排查
  • 错误的激活处理入口
    WinUI 3应用的协议激活(对应ActivationKind.Protocol)不会触发OnLaunched方法,而是走OnActivated回调。你当前仅在OnLaunched里判断激活类型,自然捕获不到协议激活场景,所以拿到的ActivationKind始终是Launch,参数也为空。

  • 正确的代码实现方式

  1. 重写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();
}
  1. 抽离窗口初始化逻辑,避免OnLaunched和OnActivated重复代码:
    把OnLaunched里的窗口创建、激活等逻辑封装成独立方法(比如InitializeApplicationWindow),在两个回调中都调用该方法,保证应用启动状态一致。
  • 验证URI协议注册正确性
    检查项目的Package.appxmanifest是否正确配置了协议:

  • 打开Package.appxmanifest,切换到「声明」标签页

  • 添加「协议」声明,填写协议名称(需和你使用的myapp://前缀中的myapp一致)、显示名称等信息

  • 保存后重新部署应用

  • 覆盖所有激活场景
    无论应用是从冷启动还是后台唤醒,协议激活都会触发OnActivated,因此必须在该方法中处理参数,才能覆盖所有使用URI启动的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:27:09