Compartilhar via


Usar a API de dependência dinâmica para referenciar pacotes MSIX em tempo de execução

As duas implementações

Há duas implementações da API de dependência dinâmica que você pode escolher, dependendo da plataforma de destino e do cenário:

  • A API de dependência dinâmica do SDK do Aplicativo Windows. O SDK do aplicativo do Windows fornece funções C e C++ (em msixdynamicdependency.h) e tipos Windows Runtime (WinRT) (no namespace Microsoft.Windows.ApplicationModel.DynamicDependency) que implementam a API de dependência dinâmica. Você pode usar essa implementação da API em qualquer versão do Windows que dê suporte ao SDK do Aplicativo do Windows.
  • API de dependência dinâmica do Windows 11. O Windows 11 também fornece funções C e C++ que implementam a API de dependência dinâmica (em appmodel.h). Essa implementação da API só pode ser usada por aplicativos destinados ao Windows 11, versão 22H2 (10.0; Build 22621) e posterior.

Veja também diferenças entre as duas implementações.

Observação

Como você verá neste tópico, as APIs do SDK do Aplicativo do Windows (C/C++) têm os mesmos nomes que as APIs do Windows 11 (C/C++) com um prefixo Mdd adicional. Mdd significa Dependências Dinâmicas da Microsoft.

E há diferentes tipos de pacotes MSIX, incluindo pacotes de estrutura , de recursos , opcionais e principais . A API de dependência dinâmica permite que aplicativos não empacotados façam referência e usem pacotes de estrutura , como o WinUI 2 e o DirectX Runtime. Para obter mais informações sobre dependências de pacote de estrutura, consulte pacotes de estrutura MSIX e dependências dinâmicas.

Especificamente, a API de dependência dinâmica fornece maneiras de gerenciar as referências de tempo de instalação e referências de tempo de execução para pacotes MSIX. Para obter mais informações, consulte o modelo de manutenção para pacotes de estrutura.

Usar a API de dependência dinâmica

Para usar a API de dependência dinâmica em seu aplicativo não empacotado para usar uma dependência em um pacote MSIX, siga este padrão geral em seu código:

1. Criar uma referência de tempo de instalação

No instalador do aplicativo ou durante a primeira execução do aplicativo, chame uma das seguintes funções ou métodos para especificar um conjunto de critérios para o pacote MSIX que você deseja usar. Isso informa ao sistema operacional (SO) que seu aplicativo tem uma dependência em um pacote MSIX que atenda aos critérios especificados. Se um ou mais pacotes MSIX estiverem instalados que atendam aos critérios, o Windows garantirá que pelo menos um deles permaneça instalado até que a referência de tempo de instalação seja excluída.

Os critérios especificados incluem o nome da família de pacotes, a versão mínima e as arquiteturas; mas você não pode indicar um pacote MSIX específico. Quando você adiciona uma referência em tempo de execução ao pacote MSIX, a API escolhe a versão mais alta que atende aos critérios especificados.

Você também deve especificar um artefato de ciclo de vida , que pode ser o processo atual, um arquivo ou uma chave do Registro do Windows que indica ao sistema que o aplicativo ainda está disponível. Se o artefato especificado não existir mais, o sistema operacional poderá assumir que a dependência não é mais necessária e pode desinstalar o pacote MSIX se nenhum outro aplicativo tiver declarado dependência nele. Esse recurso é útil para cenários em que um aplicativo deixa de remover o pin de tempo de instalação quando ele é desinstalado.

Essa API retorna uma ID de dependência que deve ser usada em outras chamadas para criar referências em tempo de execução e para excluir a referência de tempo de instalação.

2. Adicione uma referência de tempo de execução

Quando seu aplicativo precisar usar o pacote MSIX, chame uma das seguintes funções ou métodos para solicitar acesso ao pacote MSIX especificado e adicione uma referência em tempo de execução para ele. Chamar essa API informa ao sistema operacional que o pacote MSIX está em uso ativo e para gerenciar as atualizações de versão de forma simultânea (efetivamente adiando a desinstalação ou mantendo a versão mais antiga até que o aplicativo termine de usá-la). Se tiver êxito, o aplicativo poderá ativar classes e usar o conteúdo do pacote MSIX.

Ao chamar essa API, você deve passar a ID de dependência que foi retornada quando você criou a referência de tempo de instalação e a classificação desejada a ser usada para o pacote MSIX no grafo de pacote do processo. Essa API retorna o nome completo do pacote MSIX referenciado e um identificador usado para acompanhar a dependência de uso ativo. Se houver vários pacotes MSIX instalados que atendam aos critérios especificados quando você criou a referência de tempo de instalação, a API escolherá a versão mais alta que atenda aos critérios.

3. Remover a referência em tempo de execução

Quando seu aplicativo terminar de usar o pacote MSIX, chame uma das seguintes funções ou métodos para remover a referência em tempo de execução. Normalmente, seu aplicativo chamará essa API durante o desligamento. Essa API informa ao sistema operacional que é seguro remover quaisquer versões desnecessárias do pacote MSIX.

Ao chamar essa API, você deve passar o identificador que foi retornado quando você adicionou a referência em tempo de execução.

4. Excluir a referência de tempo de instalação

Quando o aplicativo for desinstalado, chame uma das seguintes funções ou métodos para excluir a referência de tempo de instalação. Essa API informa ao sistema operacional que é seguro remover o pacote MSIX se nenhum outro aplicativo tiver dependência dele.

Ao chamar essa API, você deve passar a ID de dependência que foi retornada quando você criou a referência de tempo de instalação.

Diferenças entre as duas implementações

A necessidade de um gerenciador de ciclo de vida (limitação do SDK de Aplicativos do Windows)

Quando você usa a API de dependência dinâmica do SDK do Aplicativo Windows para assumir uma dependência em um pacote MSIX, a API requer ajuda por meio de outro pacote instalado e processo em execução para informar ao Windows que o pacote MSIX está em uso e bloquear o serviço da estrutura enquanto ele está sendo usado. Esse componente é chamado de gerenciador de tempo de vida .

Para o pacote de estrutura dele, o SDK do Aplicativo do Windows fornece um componente de gerenciador de tempo de vida chamado DDLM (Dynamic Dependency Lifetime Manager). No entanto, nenhum outro pacote de estrutura atualmente fornece um componente de gerenciador de tempo de vida semelhante da Microsoft.

A API de dependência dinâmica do Windows 11 não tem essa limitação.

Referenciar e usar pacote principal (limitação do Windows App SDK)

Uma dependência dinâmica pode sempre apontar para um pacote de estrutura . Mas apenas a API de dependência dinâmica do Windows 11 também pode referenciar e usar pacotes principais .

O pacote principal deve ter o arquivo de origem do manifesto do pacote do aplicativo configurado corretamente (o arquivo Package.appxmanifest no Visual Studio). Especificamente, o pacote principal (o destino, não o chamador) precisa ser definido <uap15:DependencyTarget>true</> (consulte uap15:DependencyTarget). Portanto, a finalidade de <uap15::DependencyTarget> é habilitar uma dependência dinâmica para apontar para um pacote principal . Em outras palavras, o pacote principal precisa optar por permitir que ele seja usado como uma dependência dinâmica (enquanto os pacotes de estrutura sempre permitem isso implicitamente).

Referenciar o pacote de estrutura do Windows App SDK (limitação do Windows App SDK)

Em um aplicativo não empacotado, você não pode usar a API de dependência dinâmica do Windows App SDK para fazer referência ao pacote de framework do Windows App SDK (como você pode referenciar outros pacotes MSIX com ele). Em vez disso, você precisa usar a API bootstrapper fornecida pelo SDK do Aplicativo do Windows. A API do bootstrapper é uma forma especializada da API de dependência dinâmica que foi projetada para estabelecer dependências no pacote de estrutura do Windows App SDK. Para obter mais informações, confira Usar o runtime SDK do Aplicativo do Windows para aplicativos empacotados com localização externa ou não empacotados.

A API de dependência dinâmica do Windows 11 não tem essa limitação.