Appaktivering för Windows App SDK skrivbordsappar

När systemet eller en annan app startar din app aktiveras den. Beroende på hur appen startas varierar aktiveringstyp. Den här artikeln beskriver hur du hanterar olika aktiveringsscenarier i en Windows App SDK skrivbordsapp.

Aktiveringsöversikt

Windows App SDK tillhandahåller en omfattande aktiveringsmodell via Microsoft.Windows. AppLifecycle-namnområde. Du använder AppInstance.GetActivatedEventArgs för att hämta aktiveringsinformation när som helst.

Vanliga aktiveringstyper är:

Aktiveringstyp Scenario
Launch Användaren väljer apppanelen eller genvägen
File Användaren öppnar en fil som är associerad med appen
Protocol Ett URI-schema som är registrerat i appen anropas
StartupTask Appen är konfigurerad för att starta vid användarinloggning
PushNotification Appen aktiveras av en AppNotification (via AppNotificationManager)

Important

Windows App SDK-skrivbordsappar använder Microsoft.Windows.AppLifecycle-API:er för avancerad aktivering. Metoden Microsoft.UI.Xaml.Application.OnLaunched anropas fortfarande för XAML-baserade appar, men den tillhandahåller inte alla aktiveringstyper. Se AppInstance.GetActivatedEventArgs() för den fullständiga aktiveringskontexten.

Hantera aktivering vid start

Den vanligaste aktiveringen är en standardstart. Åsidosätt OnLaunched i din 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
{
}

Hantera omfattande aktiveringstyper

Om du vill svara på fil-, protokoll- eller andra aktiveringstyper kontrollerar du AppInstance.GetActivatedEventArgs() tidigt i appstarten. En vanlig metod är att kontrollera i OnLaunched eller i din Main-metod:

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
{
}

Registrera typer av aktivering

Hur du registrerar dig för fil- eller protokollaktivering beror på om din app är paketerad (MSIX) eller uppackad.

Paketerade appar

Registrera associationerna i appmanifestet:

Filtypsassociation (i 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>

Protokollkoppling:

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

Information om startaktivering finns i Konfigurera din app så att den startar vid inloggning.

Opacketerade appar

Uppackade appar (till exempel en vanlig WPF- eller Win32-app med hjälp av Windows App SDK) har inget manifest, så du registrerar samma aktiveringstyper i kod vid start med hjälp av statiska metoder på Microsoft.Windows.AppLifecycle.ActivationRegistrationManager. Registreringar är per användare och bevaras mellan lanseringar, så det är säkert att anropa detta varje gång din app startar.

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

Om du vill ta bort en registrering (till exempel under avinstallationen) anropar du matchningen UnregisterForProtocolActivation eller UnregisterForFileTypeActivation metoden.

Både paketerade och uppackade appar hämtar aktiveringsargument på samma sätt med hjälp av AppInstance.GetCurrent().GetActivatedEventArgs(), som du ser tidigare i den här artikeln. Mer information finns i Omfattande aktivering med appens livscykel-API.

Hantera aktivering i en instans som är igång

Om appen redan körs när en andra aktivering sker kan du omdirigera den till den befintliga instansen med hjälp av API:erna för flera instanser. Mer information om hur du registrerar nycklar och omdirigering av aktiveringar finns i Appar med flera instanser .

Skillnader från UWP-aktivering

Feature UWP Windows App SDK (Desktop)
Startpunkt för aktivering OnActivated, OnFileActivated, OnLaunched åsidosättningar AppInstance.GetActivatedEventArgs() + OnLaunched
Tidigare körningstillstånd LaunchActivatedEventArgs.PreviousExecutionState Tillhandahålls inte av systemet – implementera din egen
Stöd för förhandsstart Ja (anmäl dig) No
Namespace Windows.ApplicationModel.Activation Microsoft.Windows.AppLifecycle (med Windows.ApplicationModel.Activation datatyper)