Registro e tempo de vida do pacote

A remoção de um pacote MSIX para um usuário nem sempre exclui imediatamente seus arquivos preparados. Windows gerencia pacotes em estágio acompanhando se os usuários, outros pacotes ou processos em execução ainda fazem referência a eles.

Use os seguintes termos ao descrever o tempo de vida do pacote:

  • Preparar: coloque o payload de um pacote em um repositório de instalação gerenciado pelo Windows.
  • Registrar: disponibilize um pacote preparado para um usuário e crie suas integrações específicas do usuário.
  • Remover ou cancelar registro: remova o registro e as integrações de um usuário.
  • Remover do estado preparado: exclua o payload do pacote em preparação do armazenamento.

Uma operação de remoção pode cancelar o registro de um pacote sem removê-lo da área de preparo imediatamente.

Referências robustas

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

  • Registro explícito de pacote de um usuário.
  • Provisionamento que disponibiliza o pacote aos usuários.
  • Uma dependência estática declarada por meio de PackageDependency.
  • Uma dependência de host-runtime.
  • Uma dependência dinâmica persistente que só o pacote pode satisfazer.
  • Um processo que atualmente está usando o conteúdo do pacote.
  • Um pino do sistema.
  • Associação ao produto UUP (Unified Update Platform).

Os pacotes de estrutura geralmente permanecem em preparação porque outros pacotes dependem deles. Várias versões do pacote framework podem permanecer lado a lado enquanto os aplicativos fazem a transição entre versões.

Referências fracas

Uma referência fraca não mantém um pacote em preparação independentemente. As relações entre recursos e pacotes são o exemplo principal. Se apenas referências fracas permanecerem, Windows poderá remover o pacote e seus relacionamentos fracos.

O que acontece durante a remoção

Quando você remove um pacote, Windows primeiro remove o registro de usuário aplicável e as integrações específicas do usuário. Em seguida, ele avalia se as referências fortes permanecem:

  1. Se uma referência robusta permanecer, o pacote permanecerá em estado de preparação.
  2. Se nenhuma referência forte permanecer, o pacote se tornará elegível para remoção do armazenamento temporário.
  3. O Windows remove o payload na próxima vez que a implantação avaliar e coletar o pacote não referenciado.

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

Se um processo estiver usando o pacote, a remoção normalmente solicitará o encerramento do aplicativo. Para evitar interromper o processo, chame PackageManager.RemovePackageAsync com RemovalOptions.DeferRemovalWhenPackagesAreInUse. Windows conclui a remoção depois que o pacote não estiver mais em uso.

Comportamento do PowerShell

Remove-AppxPackage remove um registro. Não use a ausência de um registro de usuário como prova de que o Windows já excluiu todos os arquivos preparados.

Use Get-AppxPackage -AllUsers e comandos de provisionamento ao diagnosticar referências mantidas por outros usuários ou pelo provisionamento de dispositivos. A remoção de um pacote provisionado afeta registros futuros, mas não remove registros que já existem para os usuários.