在更新 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 屬性已設定為更新工作類別的 namespace.class 名稱。 名稱會區分大小寫。

步驟 3:偵錯/測試您的更新工作

請確定您已將應用程式部署至您的電腦,以便有要更新的專案。

在背景工作的 Run() 方法中設定斷點。

set breakpoint

接下來,在方案總管中,以滑鼠右鍵按下您的應用程式專案(而非背景工作專案),然後按兩下 [ 屬性]。 在應用程式 屬性視窗 中,按兩下左側的 [偵錯],然後選取 [不要啟動],但在程式代碼啟動時對我的程式代碼進行偵錯:

set debug settings

接下來,若要確保觸發UpdateTask,請增加套件的版本號碼。 在 方案總管 中,按兩下應用程式的 Package.appxmanifest 檔案以開啟套件設計工具,然後更新組建編號:

update the version

現在,當您按下 F5 時,在 Visual Studio 2019 中,您的應用程式將會更新,系統會在背景中啟動 UpdateTask 元件。 調試程式會自動附加至背景進程。 您的斷點將會遭到叫用,您可以逐步執行更新程式碼邏輯。

當背景工作完成時,您可以從相同偵錯會話內的 Windows 開始選單啟動前景應用程式。 調試程式將再次自動附加,這次會附加至前景進程,而且您可以逐步執行應用程式的邏輯。

注意

Visual Studio 2015 使用者:上述步驟適用於 Visual Studio 2017 或 Visual Studio 2019。 如果您使用 Visual Studio 2015,您可以使用相同的技術來觸發及測試 UpdateTask,但 Visual Studio 不會附加至它。 VS 2015 中的替代程式是設定 ApplicationTrigger ,將UpdateTask設定為其進入點,並直接從前景應用程式觸發執行。

另請參閱

建立及註冊跨處理序的背景工作