Registo de pacotes e tempo de vida

Remover um pacote MSIX para um utilizador nem sempre apaga imediatamente os seus ficheiros preparados. O Windows gere pacotes preparados rastreando se os utilizadores, outros pacotes ou processos em execução ainda os referenciam.

Utilize os seguintes termos ao descrever a vida útil do pacote:

  • Stage: Coloque a carga útil de um pacote numa loja de instalações gerida pelo Windows.
  • Registar: Disponibilize um pacote em preparação a um utilizador e crie as suas integrações específicas para cada utilizador.
  • Remover ou desregistar: Remover o registo e as integrações de um utilizador.
  • Destage: Apagar a carga útil do pacote preparado do armazenamento.

Uma operação de remoção pode desregistar um pacote sem o retirar imediatamente da área de preparação.

Referências fortes

O Windows não pode retirar um pacote do estado preparado enquanto uma referência forte permanecer. Referências fortes comuns incluem:

  • O registo explícito da subscrição do utilizador.
  • Provisionamento que disponibiliza o pacote aos utilizadores.
  • Uma dependência estática declarada através de PackageDependency.
  • Uma dependência do host-runtime.
  • Uma dependência dinâmica persistente que só o pacote pode satisfazer.
  • Um processo que atualmente utiliza o conteúdo do pacote.
  • Um pin do sistema.
  • Afiliação ao produto Plataforma Unificada de Atualização (UUP).

Os pacotes framework normalmente permanecem em preparação porque outros pacotes dependem deles. Múltiplas versões do pacote Framework podem permanecer lado a lado enquanto as aplicações transitam entre versões.

Referências fracas

Uma referência fraca não mantém um pacote independentemente em preparação. As relações resource-package são o principal exemplo. Se apenas referências fracas permanecerem, o Windows pode remover o pacote e as suas dependências fracas.

O que acontece durante a remoção

Quando remove um pacote, o Windows remove primeiro o registo de utilizador aplicável e as integrações específicas de cada utilizador. Depois avalia se permanecem referências fortes:

  1. Se permanecer uma referência forte, o pacote mantém-se em espera.
  2. Se não permanecerem referências fortes, o pacote torna-se elegível para destaging.
  3. O Windows remove o payload quando a implantação é novamente avaliada e recolhe o pacote não referenciado.

O destaging pode ocorrer após a conclusão da operação de remoção. Algumas alterações de referência acontecem fora de uma operação de implantação, por isso a limpeza do payload nem sempre é imediata.

Se um processo estiver a usar o pacote, a remoção normalmente pede o encerramento da aplicação. Para evitar interromper o processo, chame PackageManager.RemovePackageAsync com RemovalOptions.DeferRemovalWhenPackagesAreInUse. O Windows conclui a remoção depois de o pacote deixar de ser utilizado.

Comportamento do PowerShell

Remove-AppxPackage remove um registo. Não use a ausência de registo de utilizador como prova de que o Windows já apagou todos os ficheiros preparados.

Utilizar Get-AppxPackage -AllUsers e comandos de aprovisionamento ao diagnosticar referências detidas por outros utilizadores ou pelo aprovisionamento de dispositivos. Remover um pacote provisionado afeta registos futuros, mas não remove os registos que já existem para os utilizadores.