Activación de aplicaciones para aplicaciones de escritorio de SDK de Aplicaciones para Windows

Cuando el sistema u otra aplicación inicia tu aplicación, la activa. Dependiendo de cómo se inicie la aplicación, el tipo de activación varía. En este artículo se explica cómo controlar diferentes escenarios de activación en una aplicación de escritorio de SDK de Aplicaciones para Windows.

Resumen de activación

SDK de Aplicaciones para Windows proporciona un completo modelo de activación a través del espacio de nombres Microsoft.Windows.AppLifecycle. Use AppInstance.GetActivatedEventArgs para recuperar los detalles de activación en cualquier momento.

Entre los tipos de activación comunes se incluyen:

Tipo de activación Escenario
Launch El usuario selecciona el icono de la aplicación o el acceso directo
File El usuario abre un archivo asociado a la aplicación
Protocol Se invoca un esquema de URI registrado en la aplicación
StartupTask La aplicación está configurada para iniciarse en el inicio de sesión del usuario.
PushNotification La aplicación se activa mediante una AppNotification (a través de AppNotificationManager)

Importante

Las aplicaciones de escritorio de SDK de Aplicaciones para Windows utilizan las API Microsoft.Windows.AppLifecycle para la activación avanzada. Se sigue llamando al método Microsoft.UI.Xaml.Application.OnLaunched para las aplicaciones basadas en XAML, pero no proporciona todos los tipos de activación. Consulte AppInstance.GetActivatedEventArgs() para ver el contexto de activación completo.

Gestionar la activación del inicio

La activación más común es un lanzamiento estándar. Anule OnLaunched en su App.xaml.cs:

using Microsoft.UI.Xaml;

public partial class App : Application
{
    private Window? m_window;

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        m_window = new MainWindow();
        m_window.Activate();
    }
}

// MainWindow is the window class generated by the WinUI 3 project
// template (MainWindow.xaml / MainWindow.xaml.cs).
public partial class MainWindow : Window
{
}

Controlar tipos de activación enriquecida

Para responder a la activación por archivo, protocolo u otros tipos de activación, compruebe AppInstance.GetActivatedEventArgs() al inicio de la aplicación. Un enfoque típico consiste en comprobar en OnLaunched o en su método Main:

using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle;

public partial class App : Application
{
    private Window? m_window;

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        var activatedArgs = AppInstance.GetCurrent().GetActivatedEventArgs();

        m_window = new MainWindow();

        switch (activatedArgs.Kind)
        {
            case ExtendedActivationKind.File:
                var fileArgs = activatedArgs.Data as
                    Windows.ApplicationModel.Activation.IFileActivatedEventArgs;
                if (fileArgs != null)
                {
                    // Navigate to a page that handles the file
                    // fileArgs.Files contains the list of activated files
                }
                break;

            case ExtendedActivationKind.Protocol:
                var protocolArgs = activatedArgs.Data as
                    Windows.ApplicationModel.Activation.IProtocolActivatedEventArgs;
                if (protocolArgs != null)
                {
                    // Navigate based on the URI
                    // protocolArgs.Uri contains the activation URI
                }
                break;

            default:
                // Standard launch — navigate to home page
                break;
        }

        m_window.Activate();
    }
}

// MainWindow is the window class generated by the WinUI 3 project
// template (MainWindow.xaml / MainWindow.xaml.cs).
public partial class MainWindow : Window
{
}

Registro para los tipos de activación

La forma en que se registra para la activación de archivos o protocolos depende de si la aplicación está empaquetada (MSIX) o desempaquetada.

Aplicaciones empaquetadas

Registre las asociaciones en el manifiesto de la aplicación:

Asociación de tipo de archivo (en Package.appxmanifest):

<Extensions>
  <uap:Extension Category="windows.fileTypeAssociation">
    <uap:FileTypeAssociation Name="myfiletype">
      <uap:SupportedFileTypes>
        <uap:FileType>.myext</uap:FileType>
      </uap:SupportedFileTypes>
    </uap:FileTypeAssociation>
  </uap:Extension>
</Extensions>

Asociación de protocolos:

<Extensions>
  <uap:Extension Category="windows.protocol">
    <uap:Protocol Name="myapp" />
  </uap:Extension>
</Extensions>

Para el inicio automático, consulte Configure la aplicación para que se inicie al iniciar sesión.

Aplicaciones sin empaquetar

Las aplicaciones sin empaquetar (por ejemplo, una aplicación de WPF sin formato o Win32 con el SDK de Aplicaciones para Windows) no tienen ningún manifiesto, por lo que se registran los mismos tipos de activación en el código en el inicio mediante los métodos estáticos en Microsoft.Windows.AppLifecycle.ActivationRegistrationManager. Los registros son por usuario y persisten entre ejecuciones, por lo que es seguro llamar a esto cada vez que se inicia la aplicación.

using Microsoft.Windows.AppLifecycle;

// Register a protocol (URI scheme)
ActivationRegistrationManager.RegisterForProtocolActivation(
    "myapp",            // scheme
    string.Empty,       // logo (optional)
    "My App",           // display name
    string.Empty);      // exePath — empty registers the current executable

// Register a file type
ActivationRegistrationManager.RegisterForFileTypeActivation(
    new[] { ".myext" },                 // supported file extensions
    string.Empty,                       // logo (optional)
    "My App",                           // display name
    new[] { "open" },                   // supported verbs
    string.Empty);                      // exePath — empty registers the current executable

Para eliminar un registro (por ejemplo, durante la desinstalación), llame al método correspondiente UnregisterForProtocolActivation o UnregisterForFileTypeActivation.

Las aplicaciones empaquetadas y desempaquetadas recuperan argumentos de activación de la misma manera, mediante AppInstance.GetCurrent().GetActivatedEventArgs(), como se muestra anteriormente en este artículo. Para obtener más información, consulte Activación enriquecida con la API del ciclo de vida de la aplicación.

Controlar la activación en una instancia en ejecución

Si la aplicación ya se está ejecutando cuando se produce una segunda activación, puede redirigirla a la instancia existente mediante las API de varias instancias. Consulte Aplicaciones de instancias múltiples para más información sobre el registro de claves y la redirección de activaciones.

Diferencias con la activación de UWP

Feature UWP SDK de Aplicaciones para Windows para escritorio
Punto de entrada de activación OnActivated, OnFileActivated, OnLaunched anulaciones AppInstance.GetActivatedEventArgs() + OnLaunched
Estado de ejecución anterior LaunchActivatedEventArgs.PreviousExecutionState No proporcionado por el sistema: implemente su propio
Soporte técnico previo Sí (participar) No
Namespace Windows.ApplicationModel.Activation Microsoft.Windows.AppLifecycle (con Windows.ApplicationModel.Activation tipos de datos)