Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Quando o sistema ou outra aplicação inicia a sua aplicação, ativa-a . Dependendo de como a aplicação é iniciada, o tipo de ativação varia. Este artigo explica como lidar com diferentes cenários de ativação numa aplicação desktop do SDK de Aplicações Windows.
Visão geral da ativação
O SDK de Aplicações Windows oferece um modelo de ativação avançado através do espaço de nomes Microsoft.Windows.AppLifecycle. Usas o AppInstance.GetActivatedEventArgs para recuperar detalhes de ativação a qualquer momento.
Os tipos de ativação mais comuns incluem:
| Tipo de ativação | Scenario |
|---|---|
Launch |
O utilizador seleciona o mosaico ou o atalho da aplicação |
File |
O utilizador abre um ficheiro associado à aplicação |
Protocol |
É invocado um esquema URI registado na aplicação |
StartupTask |
A aplicação está configurada para iniciar no login do utilizador |
PushNotification |
A aplicação é ativada por um AppNotification (via AppNotificationManager) |
Importante
As aplicações de ambiente de trabalho do SDK de Aplicações Windows utilizam APIs Microsoft.Windows.AppLifecycle para ativação avançada. O Microsoft.UI.Xaml.Application.OnLaunched método ainda é chamado para aplicações baseadas em XAML, mas não fornece todos os tipos de ativação. Consulte AppInstance.GetActivatedEventArgs() para obter o contexto completo da ativação.
Gerir a ativação do arranque
O tipo de ativação mais comum é um início padrão. Substituir OnLaunched no seu 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
{
}
Processar tipos de ativação avançados
Para responder a ativações por ficheiro, protocolo ou outros tipos, verifique AppInstance.GetActivatedEventArgs() durante o arranque da sua aplicação. Uma abordagem típica consiste em verificar em OnLaunched ou no 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
{
}
Registar-se para tipos de ativação
A forma como se regista para ativação de ficheiros ou protocolos depende de a sua aplicação ser empacotada (MSIX) ou não empacotada.
Aplicações empacotadas
Registe as associações no manifesto da sua aplicação:
Associação de tipos de ficheiro (em 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>
Associação de protocolo:
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="myapp" />
</uap:Extension>
</Extensions>
Para ativação no arranque, consulte Configurar a sua aplicação para iniciar no início de sessão.
Aplicações não empacotadas
Aplicações não empacotadas (por exemplo, uma aplicação WPF ou Win32 simples usando o SDK de Aplicações Windows) não têm manifesto, por isso regista os mesmos tipos de ativação no código no arranque usando os métodos estáticos em Microsoft.Windows.AppLifecycle.ActivationRegistrationManager. Os registos são por utilizador e mantêm-se durante os lançamentos, por isso é seguro anunciar isto sempre que a sua aplicação inicia.
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 remover um registo (por exemplo, durante a desinstalação), chame o método correspondente UnregisterForProtocolActivation ou UnregisterForFileTypeActivation.
Tanto as aplicações embaladas como as não embaladas recuperam os argumentos de ativação da mesma forma, usando AppInstance.GetCurrent().GetActivatedEventArgs(), como mostrado anteriormente neste artigo. Para mais detalhes, consulte Ativação enriquecida com a API do ciclo de vida da aplicação.
Ativação do controlo numa instância em execução
Se a sua aplicação já estiver a correr quando ocorre uma segunda ativação, pode redirecioná-la para a instância existente usando as APIs multi-instância. Consulte aplicações de várias instâncias para obter detalhes sobre como registar chaves e redirecionar ativações.
Diferenças em relação à ativação do UWP
| Feature | UWP | SDK de Aplicações Windows (Desktop) |
|---|---|---|
| Ponto de ativação |
OnActivated, OnFileActivated, OnLaunched substituições |
AppInstance.GetActivatedEventArgs() + OnLaunched |
| Estado de execução anterior | LaunchActivatedEventArgs.PreviousExecutionState |
Não fornecido pelo sistema — implemente o seu próprio |
| Suporte pré-lançamento | Sim (opt-in) | No |
| Namespace | Windows.ApplicationModel.Activation |
Microsoft.Windows.AppLifecycle (com Windows.ApplicationModel.Activation tipos de dados) |
Conteúdo relacionado
Windows developer