Condividi tramite


Come eseguire la transizione degli utenti dall'app Web non in pacchetto all'app in pacchetto dello Store

Se si distribuisce l'applicazione sia come download Web (EXE /MSI) che nello Store come applicazione in pacchetto (MSIX), è possibile impedire agli utenti di installare entrambe le versioni o eseguire la migrazione degli utenti dalla versione Web non in pacchetto alla versione dello Store. Questa guida fornisce istruzioni su come eseguire facilmente la transizione degli utenti dalla versione non in pacchetto a quella in pacchetto.

Di seguito verranno descritti due scenari:

  1. L'utente ha già installato la versione non in pacchetto basata sul Web e si vuole sostituirla con la versione in pacchetto dello Store.
  2. L'utente ha già installato entrambe le versioni e si vuole assegnare la priorità alla versione in pacchetto dello Store e disinstallare la versione non in pacchetto basata sul Web.

Scenario 1: aggiornare automaticamente l'applicazione Web non in pacchetto all'applicazione in pacchetto dello Store

Se si intende eseguire automaticamente la migrazione degli utenti dall'applicazione web non in pacchetto alla versione di Store in pacchetto, è consigliabile seguire questa procedura:

  1. Abilitare l'applicazione in pacchetto dello Store per usare la barra delle applicazioni e i pin menu Start esistenti, assicurandosi che gli utenti mantengano i collegamenti quando l'applicazione in pacchetto dello Store sostituisce l'applicazione Web non in pacchetto.
  2. Scaricare e installare automaticamente la versione dello Store dalla versione Web non in pacchetto.
  3. Indicare agli utenti che l'applicazione verrà riavviata per applicare un aggiornamento
  4. Dopo aver scaricato e installato, avviare la versione in pacchetto dello Store e chiudere la versione web non in pacchetto.
  5. Nell'applicazione archiviata in pacchetto eseguire la migrazione dei dati alla nuova cartella dati dell'app.
  6. Infine, disinstallare a livello di codice la versione Web non in pacchetto.

Scenario 2: disinstallare l'applicazione non in pacchetto basata sul Web se l'utente ha installato entrambe le versioni.

È possibile consentire agli utenti di usare entrambe le versioni dell'applicazione side-by-side, ma sarà necessario gestire i conflitti tra l'applicazione e sarà responsabile della sincronizzazione dei dati tra le 2 versioni.

Se si preferisce che gli utenti usino solo una versione 1 e assegnare la priorità alla versione dello Store, ecco alcune raccomandazioni:

  1. Abilitare l'applicazione in pacchetto dello Store per usare la barra delle applicazioni e i pin menu Start esistenti, assicurandosi che gli utenti mantengano i collegamenti quando l'applicazione in pacchetto dello Store sostituisce l'applicazione Web non in pacchetto.
  2. L'applicazione Store deve rilevare se la versione non in pacchetto è presente e disinstallarla all'avvio
  3. Quando gli utenti avviano l'applicazione non in pacchetto, è consigliabile avviare automaticamente la versione in pacchetto
  4. Eseguire potenzialmente la migrazione dei dati se si desidera
  5. Infine, disinstallare a livello di codice la versione Web non in pacchetto.

Consigli tecnici

Come installare l'applicazione nello Store in pacchetto dall'applicazione web non in pacchetto

Per avviare il download e l'installazione, è necessario conoscere l'ID dello Store dell'applicazione. Questo ID di 12 caratteri può essere ottenuto dal Centro per i partner, in particolare nella sezione "Identità prodotto", anche se l'applicazione non è ancora stata inviata.

Successivamente, è possibile usare il codice seguente per scaricare e installare automaticamente l'applicazione Store. Con questo codice sarà possibile:

  1. Assegnare un diritto all'utente dello Store corrente, se presente; in caso contrario, il diritto verrà associato al dispositivo.
  2. Avviare il download e l'installazione del prodotto senza generare avvisi popup di notifica.
  3. È possibile monitorare lo stato di avanzamento del download e dell'installazione usando le API dell'evento.
    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;
            ...
        }

Come avviare l'applicazione Store dall'app Web non in pacchetto

Per avviare un'applicazione store, è necessario conoscere il relativo AMUID, costituito dal nome della famiglia di pacchetti (disponibile nella sezione "Identità prodotto" del Centro per i partner) e dall'ID applicazione (dal tuo appxmanifest), separati da un punto esclamativo (!).

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

Come rilevare se la versione in pacchetto dello Store è installata e avviarla

È possibile determinare se la versione in pacchetto dell'applicazione è installata usando l'API win32 GetPackagesByPackageFamily e passando il nome della famiglia di pacchetti dell'app in pacchetto. Se il valore del conteggio è superiore a zero, indica che l'applicazione è installata.

Come disinstallare l'applicazione Web senza pacchetti da quella in pacchetto

Per recuperare il percorso assoluto del programma di disinstallazione, è possibile accedere al Registro di sistema.

Le informazioni sul programma di disinstallazione si trovano nel Registro di sistema all'indirizzo:

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

Recuperare il comando completo nel UninstallString valore ed eseguirlo. È consigliabile eseguire la disinstallazione automaticamente o informare l'utente che si sta eseguendo la migrazione dei dati e la disinstallazione dell'altra applicazione.

Come eseguire la migrazione dei dati

L'applicazione non in pacchetto archivia probabilmente i dati locali in:

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

Le applicazioni in pacchetto hanno lo spazio riservato per l'archiviazione dei dati, che viene eliminata automaticamente quando l'applicazione viene disinstallata. È consigliabile (anche se non obbligatorio) eseguire la migrazione dei dati a questo spazio al primo avvio. È possibile recuperare il percorso assoluto di questa cartella chiamando Windows.Storage.ApplicationData.Current.LocalFolder.Path.

Come eseguire la migrazione di acquisizioni e acquisti in-app

Acquisti in-app

Per garantire un'esperienza utente ottimale, è essenziale che gli utenti possano accedere facilmente al contenuto acquistato nella versione non in pacchetto dell'applicazione. Con questo obiettivo, Microsoft Store ha aumentato la sua flessibilità per gli editori consentendo l'uso delle proprie piattaforme commerciali o di terze parti oltre a Microsoft dal giugno 2021.

È consigliabile che gli editori continuino a verificare i diritti di acquisto in-app come eseguiti nella versione non in pacchetto dell'applicazione oltre a integrarsi con la piattaforma Microsoft Commerce per consentire agli utenti di acquistare facilmente il contenuto con pochi clic su Windows.

Consentire agli utenti a pagamento dell'applicazione non in pacchetto di eseguire la migrazione alla versione in pacchetto

Se gli utenti hanno acquistato il prodotto sul tuo sito Web, non devono pagare di nuovo per scaricare la versione in pacchetto dallo Store. Per garantire una transizione senza problemi, è consigliabile adottare gli approcci seguenti:

  1. Offrire una versione gratuita/demo del prodotto, consentendo agli utenti di sbloccare la versione completa tramite acquisti in-app. Per gli utenti che hanno già pagato sul sito Web, abilitarli per accedere alla versione completa accedendo per verificare le licenze o immettendo il codice di licenza nell'interfaccia utente dell'applicazione.
  2. Impostare l'applicazione come offerta a pagamento, ma distribuire codice coupon agli utenti esistenti tramite i propri canali. Questi codici consentiranno loro di scaricare la versione dello Store senza costi aggiuntivi. Altre informazioni sono disponibili in Generare codici promozionali.

Come eseguire la migrazione delle scelte rapide da menu Start e barra delle applicazioni aggiunte esistenti

Gli utenti potrebbero aver aggiunto l'applicazione desktop alla barra delle applicazioni o al menu Start. È possibile indirizzare questi collegamenti alla nuova app in pacchetto includendo l'estensione "windows.desktopAppMigration" nel manifesto dell'applicazione.

Esempio

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>

Dopo aver installato l'applicazione, i pin nella barra delle applicazioni o nella menu Start, nonché i riquadri (per Windows 10) verranno avviate automaticamente l'applicazione Store.

Come eseguire la migrazione delle associazioni & di estensione e protocollo di file

Se l'applicazione supporta associazioni di file o protocolli e gli utenti hanno selezionato l'app come applicazione predefinita per estensioni e protocolli di file specifici, è possibile eseguire la migrazione di queste associazioni all'applicazione in pacchetto dello Store. Questa migrazione può essere ottenuta aggiornando il manifesto dell'app con il frammento di codice seguente.

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>

È sufficiente elencare gli identificatori programmatici di cui si vuole eseguire la migrazione e il sistema li eseguirà automaticamente alla migrazione all'applicazione dopo l'installazione.