在 UWP 应用更新时运行后台任务

了解如何编写在更新 通用 Windows 平台 (UWP) 应用商店应用后运行的后台任务。

当用户将更新安装到设备上安装的应用后,操作系统将调用更新任务后台任务。 这样,应用就可以在用户启动更新的应用之前执行初始化新推送通知通道、更新数据库架构等初始化任务。

更新任务不同于使用 ServicingComplete 触发器启动后台任务,因为在这种情况下,应用必须在更新之前至少运行一次,以便注册 ServiceingComplete 触发器将激活的后台任务。 更新任务未注册,因此从未运行过但已升级的应用仍会触发其更新任务。

步骤 1:创建后台任务类

与其他类型的后台任务一样,可以将“更新任务”后台任务作为Windows 运行时组件实现。 若要创建此组件,请按照“创建创建”的“创建后台任务”类部分中的步骤操作并注册进程外后台任务。 步骤包括:

  • 向你的解决方案添加一个 Windows 运行时组件项目。
  • 从应用创建对组件的引用。
  • 在实现 IBackgroundTask 的组件中创建公共密封类。
  • 实现 Run 方法,这是运行更新任务时调用的必需入口点。 如果要从后台任务进行异步调用,请创建和注册进程外后台任务,说明如何在 Run 方法中使用延迟

无需注册此后台任务(在“创建”中创建和注册进程外后台任务主题中的 “注册要运行的后台任务 ”部分)才能使用更新任务。 这是使用更新任务的主要原因,因为无需向应用添加任何代码来注册任务,并且应用不必至少在更新之前运行一次才能注册后台任务。

以下示例代码显示了 C# 中更新任务后台任务类的基本起点。 后台任务类本身(以及后台任务项目中的所有其他类)需要 公开密封。 后台任务类必须派生自 IBackgroundTask ,并且具有如下所示的签名的公共 Run() 方法:

using Windows.ApplicationModel.Background;

namespace BackgroundTasks
{
    public sealed class UpdateTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // your app migration/update code here
        }
    }
}

步骤 2:在包清单中声明后台任务

在 Visual Studio 解决方案资源管理器中,右键单击 Package.appxmanifest,然后单击“查看代码以查看包清单。 添加以下 <Extensions> XML 来声明更新任务:

<Package ...>
    ...
  <Applications>  
    <Application ...>  
        ...
      <Extensions>  
        <Extension Category="windows.updateTask"  EntryPoint="BackgroundTasks.UpdateTask">  
        </Extension>  
      </Extensions>

    </Application>  
  </Applications>  
</Package>

在上面的 XML 中,确保属性 EntryPoint 设置为 update 任务类的 namespace.class 名称。 该名称区分大小写。

步骤 3:调试/测试更新任务

确保已将应用部署到计算机,以便更新某些内容。

在后台任务的 Run() 方法中设置断点。

设置断点

接下来,在解决方案资源管理器中,右键单击应用的项目(而不是后台任务项目),然后单击“ 属性”。 在应用程序属性窗口中,单击左侧的“调试,然后选择“不启动”,但在启动代码时调试代码:

设置调试设置

接下来,若要确保触发 UpdateTask,请增加包的版本号。 在解决方案资源管理器中,双击应用的 Package.appxmanifest 文件打开包设计器,然后更新内部版本号

更新版本

现在,在 Visual Studio 2019 中按 F5 时,你的应用将更新,系统将在后台激活你的 UpdateTask 组件。 调试器将自动附加到后台进程。 断点将命中,你可以逐步执行更新代码逻辑。

后台任务完成后,可以从同一调试会话中的 Windows 开始菜单启动前台应用。 调试器将再次自动附加到前台进程,你可以单步执行应用的逻辑。

注意

Visual Studio 2015 用户:上述步骤适用于 Visual Studio 2017 或 Visual Studio 2019。 如果使用 Visual Studio 2015,则可以使用相同的方法来触发和测试 UpdateTask,但 Visual Studio 不会附加到它。 VS 2015 中的替代过程是设置 ApplicationTrigger,将 UpdateTask 设置为其入口点,并直接从前台应用触发执行。

另请参阅

创建和注册进程外后台任务