Noções básicas sobre como os aplicativos da área de trabalho empacotados são executados no WindowsUnderstanding how packaged desktop apps run on Windows

Este artigo oferece mais detalhes sobre o que acontece com os arquivos e as entradas de Registro quando você cria um pacote do aplicativo do Windows para o aplicativo da área de trabalho.This article provides a deeper dive on what happens to files and registry entries when you create a Windows app package for your desktop application.

Um dos principais objetivos de um pacote moderno é separar o estado do aplicativo do estado do sistema tanto quanto possível ao mesmo tempo que mantém a compatibilidade com outros aplicativos.A key goal of a modern package is to separate application state from system state as much as possible while maintaining compatibility with other apps. O Windows 10 faz isso colocando o aplicativo dentro de um pacote MSIX e detectar e redirecionar algumas alterações feitas ao sistema de arquivos e no Registro no tempo de execução.Windows 10 accomplishes this by placing the application inside a MSIX package, and then detecting and redirecting some changes it makes to the file system and registry at runtime.

Os pacotes criados para o aplicativo da área de trabalho são aplicativos somente para área de trabalho, totalmente confiáveis e não são virtualizados ou estão em área restrita.Packages that you create for your desktop application are desktop-only, full-trust applications and are not virtualized or sandboxed. Isso permite que eles interajam com outros aplicativos da mesma maneira que aplicativos da área de trabalho clássicos.This allows them to interact with other apps the same way classic desktop applications do.

InstalaçãoInstallation

Os pacotes de aplicativos são instalados em C:\Program Files\WindowsApps\package_name, com o executável intitulado app_name.exe.App packages are installed under C:\Program Files\WindowsApps\package_name, with the executable titled app_name.exe. Cada pasta do pacote contém um manifesto (chamado AppxManifest.xml) que contém um namespace XML especial para aplicativos empacotados.Each package folder contains a manifest (named AppxManifest.xml) that contains a special XML namespace for packaged apps. Dentro desse arquivo de manifesto está um elemento <EntryPoint>, que faz referência ao aplicativo de confiança total.Inside that manifest file is an <EntryPoint> element, which references the full-trust app. Quando o aplicativo é iniciado, ele não é executado em um contêiner de aplicativo e sim como normalmente o usuário o executaria.When that application is launched, it does not run inside an app container, but instead it runs as the user as it normally would.

Depois da implantação, os arquivos do pacote serão marcados como somente leitura e totalmente bloqueados pelo sistema operacional.After deployment, package files are marked read-only and heavily locked down by the operating system. O Windows evitará a inicialização dos aplicativos se esses arquivos forem adulterados.Windows prevents apps from launching if these files are tampered with.

Sistema de arquivosFile system

O sistema operacional é compatível com diferentes níveis de operação de sistemas de arquivos para aplicativos de área de trabalho empacotados, dependendo do local da pasta.The OS supports different levels of file system operations for packaged desktop applications, depending on the folder location.

Operações de AppData no Windows 10, versão 1903 e posteriorAppData operations on Windows 10, version 1903 and later

Todos os arquivos e pastas recém-criados na pasta AppData do usuário (por exemplo, C:\Users\nome_de_usuário\AppData) são gravados em um local privado por aplicativo e por usuário, mas mesclados no tempo de execução para aparecer no local AppData real.All newly created files and folders in the user's AppData folder (e.g., C:\Users\user_name\AppData) are written to a private per-user, per-app location but merged at runtime to appear in the real AppData location. Isso permite algum grau de separação de estado para artefatos usados apenas pelo aplicativo em si e também permite ao sistema limpar esses arquivos quando o aplicativo é desinstalado.This allows some degree of state separation for artifacts that are only used by the application itself, and this enables the system to clean up those files when the application is uninstalled. As modificações nos arquivos existentes na pasta AppData do usuário são permitidas para oferecer um grau mais alto de compatibilidade e interatividade entre os aplicativos e o sistema operacional.Modifications to existing files under the user's AppData folder is allowed to provide a higher degree of compatibility and interactivity between applications and the OS. Isso reduz o “rot” do sistema de arquivos, já que o sistema operacional está ciente de todas as alterações de arquivos e diretórios feitas por um aplicativo.This reduces filesystem “rot” because the OS is aware of every file or directory change made by an application. A separação de estado também permite que aplicativos de área de trabalho empacotados continuem de onde uma versão não empacotada do mesmo aplicativo parou.State separation also allows packaged desktop applications to pick up where a non-packaged version of the same application left off. Observe que o sistema operacional não é compatível com uma pasta VFS (sistema de arquivos virtual) para a pasta AppData do usuário.Note that the OS does not support a virtual file system (VFS) folder for the user's AppData folder.

Operações de AppData no Windows 10, versão 1809 e anterioresAppData operations on Windows 10, version 1809 and earlier

Todas as gravações feitas na pasta AppData do usuário (por exemplo, C:\Users\user_name\AppData), inclusive criar, excluir e atualizar, são copiadas na gravação para um local privado por usuário e por aplicativo.All writes to the user's AppData folder (e.g., C:\Users\user_name\AppData), including create, delete, and update, are copied on write to a private per-user, per-app location. Isso gera a ilusão de que o aplicativo empacotado está editando a AppData real quando está, na verdade, modificando uma cópia particular.This creates the illusion that the packaged application is editing the real AppData when it is actually modifying a private copy. Redirecionando gravações dessa maneira, o sistema pode acompanhar todas as modificações de arquivo feitas pelo aplicativo.By redirecting writes this way, the system can track all file modifications made by the app. Isso permite que o sistema limpe esses arquivos quando o aplicativo é desinstalado, o que reduz o "rot" do sistema e oferece uma experiência melhor de remoção de aplicativo para o usuário.This allows the system to clean up those files when the application is uninstalled, thus reducing system "rot" and providing a better application removal experience for the user.

Outras pastasOther folders

Além de redirecionar a AppData, as pastas conhecidas do Windows (System32, Program Files (x86) etc) são mescladas dinamicamente com diretórios correspondentes no pacote do aplicativo.In addition to redirecting AppData, Windows' well-known folders (System32, Program Files (x86), etc) are dynamically merged with corresponding directories in the app package. Cada pacote contém uma pasta chamada "VFS" na raiz.Each package contains a folder named "VFS" at its root. Todas as leituras de diretório ou arquivo no diretório VFS são mescladas em runtime às respectivas contrapartes nativas.Any reads of directories or files in the VFS directory are merged at runtime with their respective native counterparts. Por exemplo, um aplicativo pode conter C:\Program Files\WindowsApps\package_name\VFS\SystemX86\vc10.dll como parte do pacote de aplicativo, mas o arquivo apareceria instalado em C:\Windows\System32\vc10.dll.For example, an application could contain C:\Program Files\WindowsApps\package_name\VFS\SystemX86\vc10.dll as part of its app package, but the file would appear to be installed at C:\Windows\System32\vc10.dll. Isso mantém a compatibilidade com aplicativos da área de trabalho, que podem esperar que arquivos estejam em locais sem pacote.This maintains compatibility with desktop applications that may expect files to live in non-package locations.

As gravações em arquivos/pastas no pacote do aplicativo não são permitidas.Writes to files/folders in the app package are not allowed. As gravações nos arquivos e nas pastas que não fazem parte do pacote são ignoradas pelo sistema operacional e são permitiras desde que o usuário tenha permissão.Writes to files and folders that are not part of the package are ignored by the OS and are allowed as long as the user has permission.

Operações comunsCommon operations

Essa curta tabela de referência mostra operações comuns de sistema de arquivos e como o sistema operacional lida com elas.This short reference table shows common file system operations and how the OS handles them.

OperaçãoOperation ResultadoResult ExemploExample
Ler ou enumerar um arquivo ou uma pasta do Windows conhecidaRead or enumerate a well-known Windows file or folder Uma mescla dinâmica de C:\Program Files\package_name\VFS\well_known_folder à contraparte do sistema local.A dynamic merge of C:\Program Files\package_name\VFS\well_known_folder with the local system counterpart. A leitura de C:\Windows\System32 retorna o conteúdo de C:\Windows\System32 mais o conteúdo de C:\Program Files\WindowsApps\package_name\VFS\SystemX86.Reading C:\Windows\System32 returns the contents of C:\Windows\System32 plus the contents of C:\Program Files\WindowsApps\package_name\VFS\SystemX86.
Gravar em AppDataWrite under AppData Windows 10, versão 1903 e posteriores: Novos arquivos e pastas criados nos seguintes diretórios são redirecionados para um local privado por usuário e por pacote:Windows 10, version 1903 and later: New files and folders created under the following directories are redirected to a per-user, per-package private location:
  • LocalLocal
  • Local\MicrosoftLocal\Microsoft
  • RoamingRoaming
  • Roaming\MicrosoftRoaming\Microsoft
  • Roaming\Microsoft\Windows\Start Menu\ProgramsRoaming\Microsoft\Windows\Start Menu\Programs
Em resposta ao comando para abrir o arquivo, o sistema operacional abrirá o arquivo primeiro do local por usuário e por pacote.In response to a file open command, the OS will open the file from the per-user, per-package location first. Se esse local não existir, o sistema operacional tentará abrir o arquivo pelo local AppData real.If this location doesn't exist, the OS will attempt to open the file from the real AppData location. Se o arquivo for aberto pelo local AppData real, não haverá virtualização do arquivo.If the file is opened from the real AppData location, no virtualization for that file occurs. As exclusões de arquivos em AppData serão permitidas se o usuário tiver permissões.File deletes under AppData are allowed if user has permissions.

Windows 10, versão 1809 e anteriores: Copiar gravação por usuário, local de cada aplicativo.Windows 10, version 1809 and earlier: Copy-on-written to a per-user, per-app location.

AppData costuma ser C:\Users\user_name\AppData.AppData is typically C:\Users\user_name\AppData.
Gravar no pacoteWrite inside the package Não permitido.Not allowed. O pacote é somente leitura.The package is read-only. Gravações em C:\Program Files\WindowsApps\package_name não são permitidas.Writes under C:\Program Files\WindowsApps\package_name are not allowed.
Gravações fora do pacoteWrites outside the package Permitido se o usuário tiver permissões.Allowed if the user has permissions. Uma gravação em C:\Windows\System32\foo.dll será permitida se o pacote não contiver C:\Program Files\WindowsApps\package_name\VFS\SystemX86\foo.dll e o usuário tiver permissões.A write to C:\Windows\System32\foo.dll is allowed if the package does not contain C:\Program Files\WindowsApps\package_name\VFS\SystemX86\foo.dll and the user has permissions.

Locais dos pacotes VFSPackaged VFS locations

A tabela a seguir mostra onde os arquivos fornecidos como parte do pacote são sobrepostos no sistema para o aplicativo.The following table shows where files shipping as part of your package are overlaid on the system for the app. O aplicativo perceberá que os arquivos esses arquivos estão nos locais de sistema listados quando, na verdade, eles estão nos locais redirecionados em C:\Program Files\WindowsApps\package_name\VFS.Your application will perceive these files to be in the listed system locations, when in fact they are in the redirected locations inside C:\Program Files\WindowsApps\package_name\VFS. Os locais de FOLDERID são das constantes KNOWNFOLDERID.The FOLDERID locations are from the KNOWNFOLDERID constants.

Local do sistemaSystem Location Local redirecionado (em [PackageRoot]\VFS)Redirected Location (Under [PackageRoot]\VFS) Válido em arquiteturasValid on architectures
FOLDERID_SystemX86FOLDERID_SystemX86 SystemX86SystemX86 x86, amd64x86, amd64
FOLDERID_SystemFOLDERID_System SystemX64SystemX64 amd64amd64
FOLDERID_ProgramFilesX86FOLDERID_ProgramFilesX86 ProgramFilesX86ProgramFilesX86 x86, amd6x86, amd6
FOLDERID_ProgramFilesX64FOLDERID_ProgramFilesX64 ProgramFilesX64ProgramFilesX64 amd64amd64
FOLDERID_ProgramFilesCommonX86FOLDERID_ProgramFilesCommonX86 ProgramFilesCommonX86ProgramFilesCommonX86 x86, amd64x86, amd64
FOLDERID_ProgramFilesCommonX64FOLDERID_ProgramFilesCommonX64 ProgramFilesCommonX64ProgramFilesCommonX64 amd64amd64
FOLDERID_WindowsFOLDERID_Windows WindowsWindows x86, amd64x86, amd64
FOLDERID_ProgramDataFOLDERID_ProgramData AppData comumCommon AppData x86, amd64x86, amd64
FOLDERID_System\catrootFOLDERID_System\catroot AppVSystem32CatrootAppVSystem32Catroot x86, amd64x86, amd64
FOLDERID_System\catroot2FOLDERID_System\catroot2 AppVSystem32Catroot2AppVSystem32Catroot2 x86, amd64x86, amd64
FOLDERID_System\drivers\etcFOLDERID_System\drivers\etc AppVSystem32DriversEtcAppVSystem32DriversEtc x86, amd64x86, amd64
FOLDERID_System\driverstoreFOLDERID_System\driverstore AppVSystem32DriverstoreAppVSystem32Driverstore x86, amd64x86, amd64
FOLDERID_System\logfilesFOLDERID_System\logfiles AppVSystem32LogfilesAppVSystem32Logfiles x86, amd64x86, amd64
FOLDERID_System\spoolFOLDERID_System\spool AppVSystem32SpoolAppVSystem32Spool x86, amd64x86, amd64

RegistroRegistry

Os pacotes do aplicativo contêm um arquivo registry.dat que serve como o equivalente lógico de HKLM\Software no Registro real.App packages contain a registry.dat file, which serves as the logical equivalent of HKLM\Software in the real registry. Em runtime, esse Registro virtual mescla o conteúdo desse hive ao hive do sistema nativo para oferecer uma visão singular de ambos.At runtime, this virtual registry merges the contents of this hive into the native system hive to provide a singular view of both. Por exemplo, se registry.dat contiver uma única chave "Foo", uma leitura de HKLM\Software em runtime também conterá aparentemente "Foo" (além de todas as chaves do sistema nativo).For example, if registry.dat contains a single key "Foo", then a read of HKLM\Software at runtime will also appear to contain "Foo" (in addition to all the native system keys).

Somente as chaves em HKLM\Software fazem parte do pacote; as chaves em HKCU ou outras partes do Registro não fazem parte.Only keys under HKLM\Software are part of the package; keys under HKCU or other parts of the registry are not. Gravações em chaves ou valores no pacote não são permitidas.Writes to keys or values in the package are not allowed. As gravações em chaves ou valores que não fazem parte do pacote são permitidas desde que o usuário tenha permissão.Writes to keys or values not part of the package are allowed as long as the user has permission.

Todas as gravações em HKCU são cópias em gravações para um local particular por usuário e por aplicativo.All writes under HKCU are copy-on-written to a private per-user, per-app location. Tradicionalmente, os desinstaladores são conseguem limpar HKEY_CURRENT_USER porque os dados do Registro para usuários desconectados estão desmontados e não estão disponíveis.Traditionally, uninstallers are unable to clean HKEY_CURRENT_USER because the registry data for logged out users is unmounted and unavailable.

Todas as gravações são mantidas durante a atualização do pacote e são excluídas somente quando o aplicativo é totalmente removido.All writes are kept during package upgrade and only deleted when the application is removed entirely.

Operações comunsCommon operations

Essa curta tabela de referência mostra operações de Registro comuns e como o sistema operacional lida com elas.This short reference table shows common registry operations and how the OS handles them.

OperaçãoOperation ResultadoResult ExemploExample
Ler ou enumerar HKLM\SoftwareRead or enumerate HKLM\Software Uma mesclagem dinâmica do hive do pacote à contraparte do sistema local.A dynamic merge of the package hive with the local system counterpart. Se registry.dat contiver uma única chave "Foo", em runtime, uma leitura de HKLM\Software mostrará o conteúdo de HKLM\Software mais HKLM\Software\Foo.If registry.dat contains a single key "Foo," at runtime a read of HKLM\Software will show the contents of both HKLM\Software plus HKLM\Software\Foo.
Gravações em HKCUWrites under HKCU Copiar gravação por usuário, local particular de cada aplicativo.Copy-on-written to a per-user, per-app private location. Igual a AppData para arquivos.The same as AppData for files.
Grava no pacote.Writes inside the package. Não permitido.Not allowed. O pacote é somente leitura.The package is read-only. As gravações em HKLM\Software não serão permitidas, se um par chave/valor correspondente existir no hive do pacote.Writes under HKLM\Software are not allowed if a corresponding key/value exist in the package hive.
Gravações fora do pacoteWrites outside the package Ignorado pelo sistema operacional.Ignored by the OS. Permitido se o usuário tiver permissões.Allowed if the user has permissions. As gravações em HKLM\Software são permitidas desde que um par chave/valor correspondente não exista no hive do pacote e o usuário tenha permissões de acesso corretas.Writes under HKLM\Software are allowed as long as a corresponding key/value does not exist in the package hive and the user has the correct access permissions.

DesinstalaçãoUninstallation

Quando um pacote é desinstalado pelo usuário, todos os arquivos e pastas localizados em C:\Program Files\WindowsApps\package_name são removidos, bem como quaisquer gravações redirecionadas para a AppData ou para o Registro que foram capturados durante o processo de empacotamento.When a package is uninstalled by the user, all files and folders located under C:\Program Files\WindowsApps\package_name are removed, as well as any redirected writes to AppData or the registry that were captured during the packaging process.