Freigeben über


Ausführen einer Hintergrundaufgabe beim Aktualisieren der UWP-App

Erfahren Sie, wie Sie eine Hintergrundaufgabe schreiben, die ausgeführt wird, nachdem Ihre Universelle Windows-Plattform (UWP)-Store-App aktualisiert wurde.

Die Hintergrundaufgabe "Aufgabe aktualisieren" wird vom Betriebssystem aufgerufen, nachdem der Benutzer ein Update auf einer Auf dem Gerät installierten App installiert hat. Auf diese Weise kann Ihre App Initialisierungsaufgaben ausführen, z. B. einen neuen Pushbenachrichtigungskanal initialisieren, das Datenbankschema aktualisieren usw. bevor der Benutzer die aktualisierte App startet.

Die Aktualisierungsaufgabe unterscheidet sich vom Starten einer Hintergrundaufgabe mithilfe des ServicingComplete-Triggers , da ihre App in diesem Fall mindestens einmal ausgeführt werden muss, bevor sie aktualisiert wird, um die Hintergrundaufgabe zu registrieren, die vom ServicingComplete-Trigger aktiviert wird. Die Aktualisierungsaufgabe ist nicht registriert, sodass eine App, die noch nie ausgeführt wurde, aber aktualisiert wird, weiterhin die Aktualisierungsaufgabe ausgelöst wird.

Schritt 1: Erstellen der Hintergrundaufgabenklasse

Wie bei anderen Hintergrundaufgabentypen implementieren Sie die Hintergrundaufgabe "Aufgabe aktualisieren" als Windows-Runtime Komponente. Führen Sie zum Erstellen dieser Komponente die Schritte im Abschnitt "Create the Background Task class " von Create aus, und registrieren Sie eine Out-of-Process-Hintergrundaufgabe. Dazu müssen folgende Schritte ausgeführt werden:

  • Hinzufügen eines Windows-Runtime Komponentenprojekts zu Ihrer Lösung.
  • Erstellen eines Verweises von Ihrer App auf die Komponente.
  • Erstellen einer öffentlichen, versiegelten Klasse in der Komponente, die IBackgroundTask implementiert.
  • Implementieren der Run-Methode , bei der es sich um den erforderlichen Einstiegspunkt handelt, der aufgerufen wird, wenn die Aktualisierungsaufgabe ausgeführt wird. Wenn Sie asynchrone Aufrufe von Ihrer Hintergrundaufgabe ausführen möchten, wird erläutert das Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen, wie Sie eine Verzögerung in Der Run-Methode verwenden.

Sie müssen diese Hintergrundaufgabe nicht registrieren (der Abschnitt "Registrieren der auszuführenden Hintergrundaufgabe" im Abschnitt "Erstellen und Registrieren eines Hintergrundaufgabenthemas außerhalb von Prozessen") für die Verwendung der Aktualisierungsaufgabe. Dies ist der Hauptgrund für die Verwendung einer Aktualisierungsaufgabe, da Sie Ihrer App keinen Code hinzufügen müssen, um die Aufgabe zu registrieren, und die App muss nicht mindestens einmal ausgeführt werden, bevor sie aktualisiert wird, um die Hintergrundaufgabe zu registrieren.

Der folgende Beispielcode zeigt einen grundlegenden Ausgangspunkt für eine Hintergrundaufgabenklasse "Update Task" in C#. Die Hintergrundaufgabenklasse selbst und alle anderen Klassen im Hintergrundaufgabenprojekt müssen öffentlich und versiegelt sein. Die Hintergrundaufgabenklasse muss von IBackgroundTask abgeleitet sein und über eine öffentliche Run() -Methode mit der folgenden Signatur verfügen:

using Windows.ApplicationModel.Background;

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

Schritt 2: Deklarieren Der Hintergrundaufgabe im Paketmanifest

Klicken Sie in visual Studio Projektmappen-Explorer mit der rechten Maustaste auf "Package.appxmanifest", und klicken Sie auf "Code anzeigen", um das Paketmanifest anzuzeigen. Fügen Sie den folgenden <Extensions> XML-Code hinzu, um die Aktualisierungsaufgabe zu deklarieren:

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

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

Stellen Sie im obigen XML-Code sicher, dass das EntryPoint Attribut auf den Namespace.class-Namen der Aktualisierungsaufgabenklasse festgelegt ist. Beim Namen wird die Groß- und Kleinschreibung berücksichtigt.

Schritt 3: Debuggen/Testen der Aktualisierungsaufgabe

Stellen Sie sicher, dass Sie Ihre App auf Ihrem Computer bereitgestellt haben, damit etwas aktualisiert werden kann.

Legen Sie einen Haltepunkt in der Run()-Methode Der Hintergrundaufgabe fest.

Haltepunkt festlegen

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt Ihrer App (nicht auf das Hintergrundaufgabenprojekt), und klicken Sie dann auf "Eigenschaften". Klicken Sie in der Anwendung Eigenschaftenfenster links auf "Debuggen", und wählen Sie dann "Nicht starten" aus, aber debuggen Sie meinen Code, wenn sie gestartet wird:

Festlegen von Debugeinstellungen

Um sicherzustellen, dass updateTask ausgelöst wird, erhöhen Sie die Versionsnummer des Pakets. Doppelklicken Sie im Projektmappen-Explorer auf die Datei "Package.appxmanifest" Ihrer App, um den Paket-Designer zu öffnen, und aktualisieren Sie dann die Buildnummer:

Aktualisieren der Version

Wenn Sie F5 drücken, wird ihre App in Visual Studio 2019 aktualisiert, und das System aktiviert ihre UpdateTask-Komponente im Hintergrund. Der Debugger wird automatisch an den Hintergrundprozess angefügt. Ihr Haltepunkt wird erreicht, und Sie können die Updatecodelogik durchlaufen.

Nach Abschluss der Hintergrundaufgabe können Sie die Vordergrund-App über das Windows-Startmenü innerhalb derselben Debugsitzung starten. Der Debugger wird automatisch angefügt, diesmal an den Vordergrundprozess, und Sie können die Logik Ihrer App schrittweise durchlaufen.

Hinweis

Visual Studio 2015-Benutzer: Die obigen Schritte gelten für Visual Studio 2017 oder Visual Studio 2019. Wenn Sie Visual Studio 2015 verwenden, können Sie dieselben Techniken verwenden, um das UpdateTask auszulösen und zu testen, außer Visual Studio wird es nicht angefügt. Eine alternative Prozedur in VS 2015 besteht darin, einen ApplicationTrigger einzurichten, der die UpdateTask als Einstiegspunkt festlegt und die Ausführung direkt aus der Vordergrund-App auslöst.

Siehe auch

Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen