Compartir a través de


Preinstalar tareas

Los OEM y los operadores de telefonía móvil pueden suministrar aplicaciones preinstaladas en la imagen del dispositivo. Algunas de esas aplicaciones preinstaladas requieren que las tareas se ejecuten sin interacción del usuario y, a menudo, antes de que el usuario final abra la aplicación por primera vez; por ejemplo, una aplicación de encuesta de productos o un registro de servidor SMS. Del mismo modo, algunas aplicaciones necesitarán tareas de mantenimiento para ejecutarse sin interacción del usuario después de actualizar una aplicación. Las tareas anteriores a la instalación y las tareas de actualización proporcionan el mecanismo para permitir que las tareas se ejecuten en segundo plano antes de instalar la aplicación o cuando se actualice.

Hay dos tipos de tareas de implementación disponibles para las UAP: PreInstallConfigTask y UpdateTask. Ambos son IBackgroundTasks.

Estas son las reglas generales que rigen estas tareas.

  • El manifiesto de la aplicación solo puede contener un elemento PreInstallConfigTask y uno UpdateTask.
  • Las tareas de implementación son aplicables a cualquier tipo de plataforma.
  • Las tareas de implementación se pueden ejecutar una vez completada y confirmada la operación de implementación.
  • No se reinician las tareas de implementación con errores.
  • Las tareas de implementación con errores no afectan a la implementación correcta de la aplicación.
  • Las tareas de implementación no se reinician después del reinicio.
  • Las tareas de implementación no deben depender entre sí.

Ejemplos de código

Ejemplo de UpdateTask

Se admite la tarea de actualización para cualquier ruta de acceso de actualización posible, por ejemplo:

  • .xap a .xap
  • .xap a .appx
  • .xap a .appxbundle
  • .appx a .appx
  • .appx a .appxbundle
  • .appxbundle a .appxbundle

Este es el manifiesto .appx de ejemplo:

<Package>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>App.dll</Path>
        <ActivatableClass ActivatableClassId="App.UpdateTask" ThreadingModel="MTA"/>
      </InProcessServer>
    </Extension>
  </Extensions>

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

Este es el código de C# de ejemplo:

public sealed class UpdateTask : IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        var deferral = taskInstance.GetDeferral();
        taskInstance.Canceled +=
            (sender, reason) =>
            {
                cts.Cancel();
            };
        try
        {
            await MigrateApp(); // Do app migration/update steps.
        }
        catch (TaskCanceledException x)
        {
            // do nothing on cancelation.
        }
        deferral.Complete();
    }
}

Ejemplo de tarea PreInstallConfigTask

Este es el manifiesto .appx de ejemplo:

<Package>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>App.dll</Path>
        <ActivatableClass ActivatableClassId="App.PreInstallConfigTask" ThreadingModel="MTA"/>
      </InProcessServer>
    </Extension>
  </Extensions>

  <Applications>
    <Application>
      <Extensions>
        <Extension Category="windows.preInstalledConfigTask"  EntryPoint=" App.PreInstallConfigTask">
        </Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

Este es el código de C# de ejemplo:

public sealed class PreInstallConfigTask : IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        var deferral = taskInstance.GetDeferral();
        taskInstance.Canceled +=
            (sender, reason) =>
            {
                cts.Cancel();
            };
        try
        {
            await DownloadContactList(); // Do app migration/update steps.
        }
        catch (TaskCanceledException x)
        {
            // do nothing on cancelation.
        }
        deferral.Complete();
    }
}

Tareas preinstaladas para aplicaciones clásicas de Windows

Hay tres tipos de tareas de implementación disponibles para aplicaciones clásicas de Windows, como se muestra en la tabla siguiente. Si implementa la aplicación clásica de Windows en Windows 10, estas tareas funcionarán según lo previsto.

Tarea Descripción
PREINSTALAR _OEM_TASK Una aplicación preinstalada de 1 o 2ª parte puede ejecutarse en la tarea en tiempo de instalación sin necesidad de que el usuario final inicie la aplicación.
UPDATE_TASK Una vez actualizada una aplicación, incluido .appx a .uap, se puede ejecutar una tarea de mantenimiento para llevar a cabo cualquier tarea relacionada con la migración, además sin necesidad de ninguna interacción del usuario.
CONVERGENCIA Windows 8.1 y Windows 8.1 convergencia de código telefónico. Además, habilite el esquema de manifiesto .appx unificado.