Aktywacja aplikacji dla aplikacji klasycznych Zestaw SDK do aplikacji systemu Windows

Gdy system lub inna aplikacja uruchamia aplikację, aktywuje ją. W zależności od sposobu uruchamiania aplikacji rodzaj aktywacji różni się. W tym artykule wyjaśniono, jak obsługiwać różne scenariusze aktywacji w aplikacji klasycznej Zestaw SDK do aplikacji systemu Windows.

Omówienie aktywacji

Zestaw SDK do aplikacji systemu Windows udostępnia bogaty model aktywacji za pomocą przestrzeni nazw Microsoft.Windows.AppLifecycle. Używasz klasy AppInstance.GetActivatedEventArgs do pobierania szczegółów aktywacji w dowolnym momencie.

Typowe rodzaje aktywacji obejmują:

Rodzaj aktywacji Scenario
Launch Użytkownik wybiera kafelek lub skrót aplikacji
File Użytkownik otwiera plik skojarzony z aplikacją
Protocol Zostaje wywołany schemat URI zarejestrowany w aplikacji
StartupTask Aplikacja jest skonfigurowana do uruchamiania przy logowaniu użytkownika
PushNotification Aplikacja jest aktywowana przez element AppNotification (za pośrednictwem AppNotificationManager)

Ważna

Aplikacje klasyczne Zestaw SDK do aplikacji systemu Windows używają interfejsów API Microsoft.Windows.AppLifecycle do zaawansowanej aktywacji. Metoda Microsoft.UI.Xaml.Application.OnLaunched jest nadal wywoływana dla aplikacji opartych na języku XAML, ale nie zapewnia wszystkich rodzajów aktywacji. Sprawdź w AppInstance.GetActivatedEventArgs() pełny kontekst aktywacji.

Obsługa aktywacji uruchamiania

Najczęstszą aktywacją jest standardowe uruchomienie. Zastąp OnLaunched w swoim 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
{
}

Obsługa rozbudowanych rodzajów aktywacji

Aby reagować na pliki, protokół lub inne rodzaje aktywacji, sprawdź AppInstance.GetActivatedEventArgs() wcześnie podczas uruchamiania aplikacji. Typowym podejściem jest sprawdzenie w OnLaunched lub w metodzie 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
{
}

Rejestrowanie pod kątem rodzajów aktywacji

Sposób rejestrowania w celu aktywacji pliku lub protokołu zależy od tego, czy aplikacja jest spakowana (MSIX), czy rozpakowana.

Spakowane aplikacje

Zarejestruj skojarzenia w manifeście aplikacji:

Skojarzenie typu pliku (w 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>

Powiązanie protokołu:

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

Aby uzyskać informacje na temat aktywacji uruchamiania, zobacz Konfigurowanie aplikacji do uruchamiania przy logowaniu.

Rozpakowane aplikacje

Aplikacje rozpakowane (na przykład zwykła aplikacja WPF lub Win32 korzystająca z Zestaw SDK do aplikacji systemu Windows) nie mają manifestu, dlatego rejestrujesz te same rodzaje aktywacji w kodzie podczas uruchamiania przy użyciu metod statycznych w witrynie Microsoft.Windows.AppLifecycle.ActivationRegistrationManager. Rejestracje są dla poszczególnych użytkowników i utrwalane podczas uruchamiania, więc można bezpiecznie wywołać tę funkcję za każdym razem, gdy aplikacja się uruchamia.

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

Aby usunąć rejestrację (na przykład podczas odinstalowywania), wywołaj odpowiednią metodę UnregisterForProtocolActivation lub UnregisterForFileTypeActivation.

Zarówno aplikacje pakietowane, jak i niepakietowane pobierają argumenty aktywacji w ten sam sposób, używając AppInstance.GetCurrent().GetActivatedEventArgs(), jak pokazano wcześniej w tym artykule. Aby uzyskać więcej szczegółów, zobacz Rozbudowana aktywacja przy użyciu interfejsu API cyklu życia aplikacji.

Obsługa aktywacji w uruchomionym wystąpieniu

Jeśli aplikacja jest już uruchomiona, gdy nastąpi druga aktywacja, możesz przekierować ją do już działającej instancji za pomocą interfejsów API obsługujących wiele wystąpień. Aby uzyskać szczegółowe informacje na temat rejestrowania kluczy i przekierowywania aktywacji, zobacz Aplikacje wieloinstancyjne.

Różnice w porównaniu z aktywacją platformy UWP

Funkcja platforma UWP Zestaw SDK do aplikacji systemu Windows (desktop)
Punkt uruchomienia aktywacji OnActivated, OnFileActivated, OnLaunched nadpisania AppInstance.GetActivatedEventArgs() + OnLaunched
Poprzedni stan wykonania LaunchActivatedEventArgs.PreviousExecutionState Nie jest dostarczane przez system — zaimplementuj własne rozwiązanie
Wsparcie przed uruchomieniem Tak (zgoda) No
Namespace Windows.ApplicationModel.Activation Microsoft.Windows.AppLifecycle (z typami Windows.ApplicationModel.Activation danych)