通过应用安装程序将安装参数传递到应用

使用 MSIX 分发应用时,你可以配置应用,以便当用户单击下载/安装 URI 后,在下载/安装 URI 中定义的查询字符串参数将传递到应用。 无论是用户第一次安装应用还是之前已安装应用,这都有效。 本文介绍如何配置打包的应用程序及其下载/安装 URI 以利用此功能。 如果要根据源、下载类型等跟踪或处理不同的安装,这将非常有用,并且将适用于 Web 下载,以及用户单击 URI(例如从电子邮件市场活动中)的任何其他情况。 要了解更多详细信息,请查看此博客文章

为协议激活配置应用程序

首先要做的是注册应用,以便使用定义的自定义协议启动它。 调用此协议时,将启动应用程序,并在启动应用程序时将 URI 中指定的任何参数传递给应用的激活事件参数。 可以通过在 MSIX 的 appxmanifest.xml 文件中的应用程序扩展节点中添加协议扩展条目来注册协议:

<Application>
...
   <Extensions>
     <uap:Extension Category="windows.protocol">
        <uap:Protocol Name="my-custom-protocol"/>
     </uap:Extension>
   </Extensions>
  
...
</Application>

如果使用 Windows 打包项目,则还可以通过双击 package.appxmanifest 文件,导航到“声明”选项卡并选择“可用声明”下的“协议”,使用默认清单编辑器来定义自定义协议:

Protocol declaration in package.appxmanifest

编写代码以在安装后启动应用时处理参数

需要在应用程序中实施代码来处理在启动应用时传递给应用的安装参数。 下面的示例代码使用 AppInstance.GetActivatedEventArgs 方法来确定用于实例化应用的激活类型(也可以使用其他方法处理参数)。 当您使用来自安装 uri 的查询字符串参数启动/激活应用程序时(请参阅下一节中的定义),激活类型将是由 appxmanifest.xml 和下载/安装 uri 中声明的自定义协议定义的协议激活。 激活事件参数的类型为 ProtocolActivatedEventArgs,下面是以下代码使用的内容:


using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;

public static void Main(string[] cmdArgs)
{
            
    var activationArgs = AppInstance.GetActivatedEventArgs();
    switch (activationArgs.Kind)
    {
        //Install parameters will be passed in during a protocol activation
        case ActivationKind.Protocol:
        HandleProtocolActivation(activationArgs as ProtocolActivatedEventArgs);
        break;
        case ActivationKind.Launch:
        //Regular launch activation type
        HandleLaunch(activationArgs as LaunchActivatedEventArgs);
        break;
        default:
        break;
     }       
    

     static void HandleProtocolActivation(ProtocolActivatedEventArgs args)
     {

         if (args.Uri != null)
        {
            //Handle the installation parameters in the protocol uri
            handleInstallParameter(args.Uri.ToString());

        }
            
}

将自定义激活协议和参数添加到安装 uri

设置应用以处理安装参数后,可以自定义应用下载/安装 uri,以包含唯一定义的参数,在用户单击 uri 后,这些参数将在启动时传递到应用。 uri 必须包含以下内容:

  1. 调用应用安装程序的 ms-appinstaller 协议。
  2. 指向应用的自定义协议的唯一参数 activationUri,以及启动应用时要传递给应用的安装参数。
  3. 应用的自定义协议、参数及其值。

在下面的示例 URI 中,我定义了一个自定义协议 my-custom-protocol,一个参数 my-parameter,并为其指定了值 my-param-value。 用户单击 uri 后,在启动应用时,它将在 activateUri 之后接收 uri 的查询字符串部分,在本例中为 my-custom-protocol:?my-parameter=my-param-value

ms-appinstaller:?source=https://contoso.com/myapp.appinstaller&activationUri=my-custom-protocol:?my-parameter=my-param-value
ms-appinstaller:?source=https://contos.com/myapp.msix&activationUri=my-custom-protocol:?my-parameter=my-param-value