Cómo realizar la transición de los usuarios de la aplicación desempaquetada web a la aplicación empaquetada de La Tienda

Si distribuyes la aplicación como una descarga web (EXE /MSI) y en la Tienda como una aplicación empaquetada (MSIX), es posible que quieras impedir que los usuarios instalen ambas versiones o migren usuarios de la versión web sin empaquetar a la versión de la Tienda. En esta guía se proporcionan instrucciones sobre cómo realizar la transición sin problemas de los usuarios de la versión sin empaquetar a la empaquetada.

A continuación se describen dos escenarios:

  1. El usuario ya ha instalado la versión sin empaquetar basada en web y quieres reemplazarla por la versión empaquetada de la Tienda.
  2. El usuario ya ha instalado ambas versiones y quiere dar prioridad a la versión empaquetada de Store y desinstalar la versión sin empaquetar basada en web.

Escenario 1: actualización automática de la aplicación web desempaquetada a la aplicación empaquetada store

Si quiere migrar automáticamente los usuarios de la aplicación web sin empaquetar a la versión de la Tienda empaquetada, se recomienda seguir los pasos siguientes:

  1. Habilite la aplicación empaquetada en la Tienda para usar la barra de tareas existente y menú Inicio patillas, lo que garantiza que los usuarios conserven sus accesos directos cuando la aplicación empaquetada en la Tienda reemplace la aplicación web sin empaquetar.
  2. Descargue e instale silenciosamente la versión de la Tienda desde la versión web sin empaquetar.
  3. Indicar a los usuarios que se reiniciará la aplicación para aplicar una actualización
  4. Una vez descargado e instalado, inicie la versión empaquetada de la Tienda y cierre la versión descomprimida web.
  5. En la aplicación empaquetada store, migre los datos a la nueva carpeta de datos de la aplicación.
  6. Por último, desinstale mediante programación la versión web desempaquetada.

Escenario 2: desinstale la aplicación sin empaquetar basada en web si el usuario ha instalado ambas versiones.

Puede permitir que los usuarios usen ambas versiones de la aplicación en paralelo, pero tendrá que administrar conflictos entre la aplicación y será responsable de sincronizar los datos entre las 2 versiones.

Si prefiere que los usuarios solo usen 1 versión y prioricen la versión de la Tienda, estas son algunas recomendaciones:

  1. Habilite la aplicación empaquetada en la Tienda para usar la barra de tareas existente y menú Inicio patillas, lo que garantiza que los usuarios conserven sus accesos directos cuando la aplicación empaquetada en la Tienda reemplace la aplicación web sin empaquetar.
  2. La aplicación Store debe detectar si la versión desempaquetada está presente y desinstalarla al iniciarse.
  3. Cuando los usuarios inician la aplicación sin empaquetar, debería iniciar automáticamente la versión empaquetada.
  4. Migración potencial de los datos si lo desea
  5. Por último, desinstale mediante programación la versión web desempaquetada.

Recomendaciones técnicas

Cómo instalar la aplicación empaquetada Store desde su aplicación web desempaquetada

Para iniciar la descarga e instalación, debes conocer el identificador de la Tienda de la aplicación. Este identificador de 12 caracteres se puede obtener del Centro de partners, específicamente en la sección "Identidad del producto", incluso si la aplicación aún no se ha enviado.

Posteriormente, puedes usar el código siguiente para descargar e instalar silenciosamente la aplicación Store. Este código hará lo siguiente:

  1. Asigne un derecho al usuario actual de Store si está presente; De lo contrario, el derecho se asociará al dispositivo.
  2. Inicie la descarga e instalación del producto sin generar ninguna notificación del sistema.
  3. Puede supervisar el progreso de descarga e instalación mediante las API de eventos.
    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;
            ...
        }

Cómo lanzar la aplicación Store desde su aplicación web sin empaquetar

Para iniciar una aplicación store, es necesario conocer su AMUID, que consta del nombre de familia del paquete (que se encuentra en la sección "Identidad del producto" del Centro de partners) y el identificador de aplicación (desde tu appxmanifest), separados por una exclamación (!).

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

Cómo detectar si la versión empaquetada de store está instalada e iniciarla

Puedes determinar si la versión empaquetada de la aplicación está instalada mediante la API GetPackagesByPackageFamily win32 y pasando el nombre de familia de paquetes de la aplicación empaquetada. Si el valor de recuento es mayor que cero, indica que la aplicación está instalada.

Cómo desinstalar la aplicación desempaquetada web de la empaquetada

Para recuperar la ruta de acceso absoluta del desinstalador, puede acceder al registro.

La información del desinstalador se encuentra en el Registro en:

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

Recupere el comando completo en el UninstallString valor y ejecútelo. Se recomienda realizar la desinstalación de forma silenciosa o informar al usuario de que va a migrar datos y desinstalar la otra aplicación.

Cómo migrar datos

Es probable que la aplicación desempaquetada almacene sus datos locales en:

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

Las aplicaciones empaquetadas tienen su espacio reservado para el almacenamiento de datos, que se elimina automáticamente cuando se desinstala la aplicación. Se recomienda encarecidamente (aunque no obligatorio) migrar los datos a este espacio al iniciarse. Puede recuperar la ruta de acceso absoluta de esta carpeta llamando a Windows.Storage.ApplicationData.Current.LocalFolder.Path.

Migración de adquisiciones y compras desde la aplicación

Compras desde la aplicación

Para garantizar una experiencia de usuario óptima, es esencial que los usuarios puedan acceder sin problemas al contenido que han adquirido en la versión desempaquetada de la aplicación. Con este objetivo, Microsoft Store ha aumentado su flexibilidad para los editores al permitir el uso de sus propias plataformas comerciales o de terceros además de Las de Microsoft desde junio de 2021.

Recomendamos encarecidamente a los editores que sigan comprobando los derechos de compra desde la aplicación, tal como se realizó en la versión sin empaquetar de su aplicación, además de integrarse con la plataforma de Microsoft Commerce para permitir que los usuarios compren sin esfuerzo el contenido con tan solo unos clics en Windows.

Permitir que los usuarios de pago de la aplicación sin empaquetar migren a la versión empaquetada

Si los usuarios han comprado tu producto en tu sitio web, no deberían tener que volver a pagar para descargar la versión empaquetada de la Tienda. Para garantizar una transición sin problemas, se recomiendan los siguientes enfoques:

  1. Ofrezca una versión gratuita o demostración del producto, lo que permite a los usuarios desbloquear la versión completa a través de compras desde la aplicación. Para los usuarios que ya han pagado en su sitio web, habilite para acceder a la versión completa iniciando sesión para comprobar sus licencias o escribiendo su clave de licencia en la interfaz de usuario de la aplicación.
  2. Establezca la aplicación como una oferta de pago, pero distribuya el código de cupón a los usuarios existentes a través de sus propios canales. Estos códigos les permitirán descargar la versión de la Tienda sin costo adicional. Puede encontrar más información en Generar códigos promocionales.

Migración de la barra de tareas anclada existente y accesos directos al menú Inicio

Es posible que tus usuarios hayan anclado tu aplicación de escritorio a la barra de tareas o al menú Inicio. Puede dirigir estos accesos directos a la nueva aplicación empaquetada incluyendo la extensión "windows.desktopAppMigration" en el manifiesto de aplicación.

Ejemplo

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>

Después de instalar la aplicación, las patillas de la barra de tareas o de la menú Inicio, así como los iconos (para Windows 10) se iniciarán automáticamente en la aplicación Store.

&Cómo migrar asociaciones de extensión de archivo y protocolo

Si la aplicación admite asociaciones de protocolo o extensión de archivo y usuarios han seleccionado la aplicación como la aplicación predeterminada para extensiones y protocolos de archivo específicos, tiene la opción de migrar estas asociaciones a la aplicación empaquetada de Store. Esta migración se puede lograr actualizando el manifiesto de la aplicación con el siguiente fragmento de código.

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>

Simplemente enumere los identificadores mediante programación a los que desea migrar y el sistema los migrará automáticamente a la aplicación después de la instalación.