Freigeben über


So helfen Sie Benutzern beim Übergang von Ihrer ungepackten Web-App auf eine gepackte Store-App

Wenn Sie Ihre Anwendung sowohl als Webdownload (EXE/MSI) als auch als gepackte Anwendung (MSIX) im Store verteilen, werden Sie möglicherweise verhindern wollen, dass Benutzer beide Versionen installieren, oder Sie werden Benutzer von der ungepackten Webversion auf die Store-Version migrieren wollen. Dieses Handbuch enthält Ratschläge zum nahtlosen Migrieren der Benutzer von einer ungepackten Version auf eine verpackte Version.

Im Folgenden werden zwei Szenarien beschrieben:

  1. Der Benutzer hat die webbasierte, ungepackte Version bereits installiert, und Sie möchten sie durch die verpackte Store-Version ersetzen.
  2. Der Benutzer hat bereits beide Versionen installiert und Sie möchten der verpackten Store-Version Vorrang geben und die ungepackte webbasierte Version deinstallieren.

Szenario 1: Automatisches Aktualisieren der ungepackten Webanwendung auf die verpackte Store-Anwendung

Wenn Sie Ihre Benutzer automatisch von der ungepackten Web-Anwendung auf die verpackte Store-Anwendung migrieren möchten, führen Sie die folgenden Schritte aus:

  1. Aktivieren Sie Ihre verpackte Store-Anwendung, um die vorhandene Taskleiste und die Pins im Startmenü verwenden zu können und dadurch sicherzustellen, dass Benutzer ihre Verknüpfungen beibehalten, wenn die ungepackte Web-App durch die verpackte Store-App ersetzt wird.
  2. Laden Sie im Hintergrund die Store-Version ausgehend von Ihrer ungepackten Webversion herunter und installieren Sie sie.
  3. Informieren Sie die Benutzer darüber, dass die Anwendung zur Durchführung eines Updates neu gestartet wird.
  4. Sobald Sie die App heruntergeladen und installiert haben, starten Sie die verpackte Store-Version neu und schließen Sie die ungepackte Web-Version.
  5. Migrieren Sie die Daten aus der verpackten Store-App in den neuen Anwendungsdaten-Ordner.
  6. Deinstallieren Sie abschließend programmgesteuert die ungepackte Web-Version.

Szenario 2: Deinstallieren der ungepackten Web-Anwendung, wenn der Benutzer beide Versionen installiert hat.

Sie können es Ihren Benutzern ermöglichen, beide Versionen Ihrer Anwendung gleichzeitig zu verwenden, müssen jedoch mögliche Konflikte zwischen den Anwendungen verwalten und sind verantwortlich für die Synchronisierung der Daten zwischen den beiden Versionen.

Wenn Sie es vorziehen, dass Ihre Benutzer nur eine Version verwenden und wenn Sie die Store-Version priorisieren, finden Sie hier einige Empfehlungen:

  1. Aktivieren Sie Ihre verpackte Store-Anwendung, um die vorhandene Taskleiste und die Pins im Startmenü verwenden zu können und dadurch sicherzustellen, dass Benutzer ihre Verknüpfungen beibehalten, wenn die ungepackte Web-App durch die verpackte Store-App ersetzt wird.
  2. Die Store-Anwendung sollte erkennen, ob die ungepackte Version vorhanden ist, und sie sollte sie beim Start deinstallieren.
  3. Wenn Benutzer die ungepackte Anwendung starten, sollten Sie die verpackte Version automatisch starten.
  4. Sie können die Daten bei Bedarf potenziell migrieren
  5. Deinstallieren Sie abschließend programmgesteuert die ungepackte Web-Version.

Technische Empfehlungen

Siehe Abschnitt: Installieren der verpackten Store-App von Ihrer ungepackten Anwendung aus

Sie müssen die Store-ID Ihrer Anwendung kennen, um den Download und die Installation zu initiieren. Sie können diese 12-stellige ID im Partner Center unter Abschnitt „Produktidentität“ abrufen, auch wenn Ihre Anwendung noch nicht übermittelt wurde.

Anschließend können Sie folgenden Code verwenden, um die Store-Anwendung automatisch herunterzuladen und zu installieren. Dieser Code leistet Folgendes:

  1. Weisen Sie dem aktuellen Store-Benutzer eine Berechtigung zu (falls vorhanden). Andernfalls wird die Berechtigung dem Gerät zugeordnet.
  2. Initiieren Sie den Download und installieren Sie das Produkt, ohne Benachrichtigungs-Popups zu generieren.
  3. Sie können den Download- und Installationsfortschritt mithilfe der Ereignis-APIs überwachen.
    private async Task<bool> DownloadStoreVersionAsync()
    {
        var productId = "<Product Id from Partner Center>";
        var applicationName = "<name of your application>";

        var appInstallManager = new AppInstallManager();
        var entitlement = await appInstallManager.GetFreeUserEntitlementAsync(productId, string.Empty, string.Empty);
        if (entitlement.Status is GetEntitlementStatus.NoStoreAccount)
        {
            entitlement = await appInstallManager.GetFreeDeviceEntitlementAsync(productId, string.Empty, string.Empty);
        }
        if (entitlement.Status is not GetEntitlementStatus.Succeeded)
        {
            return false;
        }

        var options = new AppInstallOptions()
        {
            LaunchAfterInstall = true,
            CompletedInstallToastNotificationMode = AppInstallationToastNotificationMode.NoToast
        };
        var items = await appInstallManager.StartProductInstallAsync(productId, string.Empty, applicationName, string.Empty, options);
        var firstItem = items.FirstOrDefault();
        if(firstItem is null)
        {
            return false;
        }
        firstItem.StatusChanged += StoreInstallation_StatusChanged;
        firstItem.Completed += StoreInstallation_Completed;
        return true;
    }

    private void StoreInstallation_Completed(AppInstallItem sender, object args)
    {
        // Launch the new Store version when ready and close this application
        // The Store version will then be responsible of migrating the data and uninstall the unpackaged version
    }

    private void StoreInstallation_StatusChanged(AppInstallItem sender, object args)
    {
        var status = sender.GetCurrentStatus();
        switch(status.InstallState)
        {
            case AppInstallState.Installing:
                {
                    // Show installing status
                }
                break;
            case AppInstallState.Downloading:
                {
                    // Show download progress using status.PercentComplete
                }
                break;
            ...
        }

Siehe Abschnitt: Starten der Store-Anwendung von Ihrer ungepackten App aus

Zum Starten einer Store-Anwendung müssen Sie ihre AMUID kennen. Diese setzt sich aus dem Paketfamiliennamen (im Partner Center unter Abschnitt „Produktidentität“ zu finden) und der Anwendungs-ID (aus Ihrer appxmanifest-Datei) zusammen, die durch ein Ausrufezeichen (!) getrennt sind.

        Process.Start(
            "explorer.exe",
            "shell:AppsFolder\\Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
        );

Überprüfen, ob die verpackte Store-Version installiert ist, und diese starten

Mithilfe der win32-API GetPackagesByPackageFamily und durch Übergeben des Produktfamiliennamens Ihrer verpackten App können Sie ermitteln, ob Ihre verpackte App-Version installiert wurde. Wenn der Wert höher ist als Null, bedeutet das, dass die Anwendung installiert ist.

Deinstallieren der ungepackten Web-Anwendung von der verpackten Anwendung aus

Sie können auf die Registrierung zugreifen, um den absoluten Pfad Ihres Deinstallationsprogramms abzurufen.

Sie finden Ihre Deinstallationsinformationen in der Registrierung unter:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<your product code GUID\>

Rufen Sie den vollständigen Befehl im Wert UninstallString ab und führen Sie ihn aus. Es wird empfohlen, die Deinstallation im Hintergrund durchzuführen oder den Benutzer darüber zu informieren, dass Sie Daten migrieren und die andere Anwendung deinstallieren.

Daten Migrieren

Ihre ungepackte Anwendung speichert ihre lokalen Daten wahrscheinlich in:

%localAppData%/<YourPublisherName\>/<YourAppName\>

Verpackte Anwendungen verfügen über einen reservierten Speicherplatz für die Speicherung von Daten. Wenn die Anwendung deinstalliert wird, wird dieser Speicherplatz automatisch gelöscht. Es wird dringend empfohlen (ist jedoch nicht obligatorisch), die Daten beim erstmaligen Start in diesen Bereich zu migrieren. Sie können den absoluten Pfad dieses Ordners abrufen, indem Sie Windows.Storage.ApplicationData.Current.LocalFolder.Path aufrufen.

Migrieren von Käufen und In-App-Käufen

In-App-Käufe

Zur Gewährleistung einer optimalen Benutzererfahrung ist es ausschlaggebend, dass Benutzer nahtlos auf die Inhalte zugreifen können, die sie mit der ungepackten Version Ihrer Anwendung erworben haben. Mit dieser Zielsetzung hat der Microsoft Store seine Flexibilität für Herausgeber erhöht, indem er ihnen seit Juni 2021 nicht nur die Nutzung der Microsoft-Plattformen ermöglicht, sondern auch die Nutzung ihrer eigenen Plattformen oder Drittanbieter-Commerce-Plattformen erlaubt.

Herausgebern wird dringend empfohlen, die Berechtigungen für In-App-Käufe ebenso weiterhin zu überprüfen, wie die Berechtigungen für die ungepackte Version ihrer Anwendung, und diese zusätzlich in die Microsoft Commerce-Plattform zu integrieren, damit Benutzer Ihre Inhalte mühelos mit nur wenigen Klicks auf Windows erwerben können.

Kostenpflichtigen Benutzern der ungepackten Anwendung die Migration zur verpackten Version erlauben

Wenn Benutzer Ihr Produkt auf Ihrer Website erworben haben, sollten sie für den Download der verpackten Store-Version nicht noch einmal bezahlen müssen. Um einen nahtlosen Übergang zu gewährleisten, empfehlen wir die folgenden Ansätze:

  1. Bieten Sie eine kostenlose Version/Demoversion Ihres Produkts an, damit Benutzer über In-App-Käufe die vollständige Version entsperren können. Benutzer, die auf Ihrer Website bereits bezahlt haben, sollten Zugriff auf die vollständige Version haben, indem sie sich anmelden, um ihre Lizenzen zu überprüfen oder ihren Lizenzschlüssel auf der Benutzeroberfläche der Anwendung eingeben.
  2. Legen Sie Ihre Anwendung als kostenpflichtig fest, verteilen Sie aber an Ihre vorhandenen Benutzer über Ihre eigenen Kanäle Gutscheincodes. Mit diesen Codes werden sie die Store-Version ohne zusätzliche Kosten herunterladen können. Weitere Informationen finden Sie unter Werbecodes generieren.

Migrieren vorhandener gepinnter Taskleisten- und Startmenüverknüpfungen

Ihre Benutzer haben möglicherweise Ihre Desktop-Anwendung an die Taskleiste oder das Startmenü angeheftet. Sie können diese Verknüpfungen an Ihre neue verpackte App weiterleiten, indem Sie die Erweiterung „windows.desktopAppMigration“ in Ihr Anwendungsmanifest einschließen.

Beispiel

xmlns:rescap3="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities/3"
...
<Extensions>
<rescap3:Extension Category="windows.desktopAppMigration">
<rescap3:DesktopAppMigration>
<rescap3:DesktopApp AumId="[your_app_aumid]" />
<rescap3:DesktopApp ShortcutPath="%USERPROFILE%\Desktop\[my_app].lnk" />
<rescap3:DesktopApp ShortcutPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\[my_app].lnk" />
<rescap3:DesktopApp ShortcutPath="%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\[my_app_folder]\[my_app].lnk"/>
</rescap3:DesktopAppMigration>
</rescap3:Extension>
</Extensions>

Nachdem Sie die Anwendung installiert haben starten die Pins in der Taskleiste oder im Startmenü sowie die Kacheln (für Windows 10) automatisch die Store-Anwendung.

Migrieren von Dateierweiterungs- und Protokollzuordnungen

Wenn Ihre Anwendung Dateierweiterungs- oder Protokollzuordnungen unterstützt und die Benutzer Ihre App als Standardanwendung für bestimmte Dateierweiterungen und Protokolle ausgewählt haben, können Sie diese Zuordnungen zu Ihrer verpackten Store-Anwendung migrieren. Diese Migration lässt sich durch die Aktualisierung Ihres App-Manifest mithilfe des folgenden Codeausschnitts erreichen.

xmlns:rescap3="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities/3"
...
<Extensions>
<uap:Extension Category="windows.fileTypeAssociation">
<uap3:FileTypeAssociation Name=".foo">
<rescap3:MigrationProgIds>
<rescap3:MigrationProgId>Foo.Bar.1</rescap3:MigrationProgId>
</rescap3:MigrationProgIds>
…
</uap3:FileTypeAssociation>
</uap:Extension>
</Extensions>

Listen Sie hierzu einfach die programmgesteuerten Identifizierungsprogramme auf, zu denen Sie migrieren möchten, und das System migriert sie nach der Installation automatisch zu Ihrer Anwendung.