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

使用 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 文件,导航到“声明”选项卡并选择“可用声明”下的“协议”,使用默认清单编辑器定义自定义协议:

package.appxmanifest 中的协议声明

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

你需要在应用程序中实现代码,以处理在启动应用时传递给应用的安装参数。 以下示例代码使用 AppInstance.GetActivatedEventArgs 方法来确定用于实例化应用 (也可以使用其他方法) 处理参数的激活类型。 使用安装 URI 中的查询 sting 参数启动/激活应用时, (在下一节) 中看到定义时,激活类型将是由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 后启动应用时,它将在 activationUri 后接收 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