在更新 UWP 應用程式時執行背景工作

瞭解如何編寫背景工作,以在通用 Windows 平台 (UWP) 市集應用程式更新後執行。

更新工作的背景工作會在使用者將應用程式更新安裝到裝置上之後,由作業系統叫用。 這可讓您的應用程式先執行初始化工作,例如初始化新的推播通知通道、更新資料庫架構等等,再讓使用者啟動更新的應用程式。

更新工作與使用 ServicingComplete 觸發程序啟動背景工作不同,因為在這種情況下,您的應用程式必須至少執行一次才能更新,以便註冊將由 ServicingComplete 觸發程序啟動的背景工作。 更新工作並未註冊,因此從未執行過但已升級的應用程式仍會觸發其更新工作。

步驟 1:建立背景工作類別

與其他類型的背景工作一樣,您將更新工作的背景工作實作為 Windows Runtime 元件。 要建立此元件,請按照「建立及註冊跨處理序的背景工作」的「建立背景工作類別」一節中的步驟進行操作。 步驟包括:

  • 將 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() 方法中設定中斷點。

設定斷點

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

設定偵錯設定

接下來,若要確保觸發 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 設定為其進入點,並直接從前景應用程式觸發執行。

另請參閱

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