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

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

配置应用程序以激活协议

第一件事是注册应用,以使用定义的 自定义协议启动 应用。 调用此协议时,将启动应用程序,在 URI 中指定的任何 prameters 在启动时传递给应用的激活事件参数。 可以通过在 MSIX 的配置文件中的"应用程序扩展"节点中添加协议扩展appxmanifest.xml协议:

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

如果使用 Windows 打包 Project ,则还可使用默认清单编辑器定义自定义协议,方法是双击 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