Dietro le quinte della tua applicazione desktop in pacchettoBehind the scenes of your packaged desktop application

Questo articolo fornisce informazioni approfondite su cosa accade ai file e le voci del Registro di sistema quando si crea un pacchetto di app di Windows per l'applicazione desktop.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.

Degli obiettivi principali di un pacchetto moderno è quello di separare lo stato dell'applicazione dallo stato del sistema il più possibile, mantenendo nel contempo la compatibilità con altre app.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. Questo risultato viene ottenuto inserendo l'applicazione in un pacchetto UWP (Universal Windows Platform), quindi rilevando e reindirizzando alcune modifiche apportate dall'applicazione al file system e al Registro di sistema in fase di esecuzione.The bridge accomplishes this by placing the application inside a Universal Windows Platform (UWP) package, and then detecting and redirecting some changes it makes to the file system and registry at runtime.

I pacchetti creati per l'applicazione desktop sono applicazioni solo desktop, attendibilità e non sono virtualizzati o in modalità sandbox.Packages that you create for your desktop application are desktop-only, full-trust applications and are not virtualized or sandboxed. In questo modo, possono interagire con altre app in modo analogo alle applicazioni desktop classiche.This allows them to interact with other apps the same way classic desktop applications do.

InstallazioneInstallation

I pacchetti delle app vengono installati in C:\Programmi\WindowsApps\nome_pacchetto e il nome del file eseguibile è nome_app.exe.App packages are installed under C:\Program Files\WindowsApps\package_name, with the executable titled app_name.exe. Ogni cartella del pacchetto contiene un manifesto (denominato AppxManifest.xml) che include uno spazio dei nomi XML speciale per le app in pacchetto.Each package folder contains a manifest (named AppxManifest.xml) that contains a special XML namespace for packaged apps. All'interno di tale file manifesto c'è un elemento <EntryPoint> che fa riferimento all'app con attendibilità totale.Inside that manifest file is an <EntryPoint> element, which references the full-trust app. Quando tale applicazione viene avviata, non viene eseguito all'interno di un contenitore di app, ma invece viene eseguita come utente come avviene normalmente.When that application is launched, it does not run inside an app container, but instead it runs as the user as it normally would.

Dopo la distribuzione, i file di pacchetto vengono contrassegnati come di sola lettura e bloccati dal sistema operativo.After deployment, package files are marked read-only and heavily locked down by the operating system. Se questi file vengono manomessi, Windows impedisce l'avvio delle app.Windows prevents apps from launching if these files are tampered with.

File systemFile system

Per contenere lo stato dell'app, le modifiche apportate all'applicazione AppData vengono acquisite.In order to contain app state, changes that the application makes to AppData are captured. Per tutte le scritture nella cartella AppData dell'utente (ad esempio, C:\Utenti\nome_utente\AppData), tra cui creazione, eliminazione e aggiornamento, viene eseguita una copia su scrittura in un percorso privato per ogni singolo utente e ogni singola app.All write 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. Ciò crea l'illusione che l'applicazione in pacchetto modificando la cartella AppData reale quando modifica in realtà una copia privata.This creates the illusion that the packaged application is editing the real AppData when it is actually modifying a private copy. Reindirizzando in questo modo le scritture, il sistema può tenere traccia di tutte le modifiche ai file effettuate dall'app.By redirecting writes this way, the system can track all file modifications made by the app. Ciò consente al sistema di pulizia di questi file quando l'applicazione viene disinstallata, riducendo così rot"system" e fornendo una rimozione delle applicazioni migliore esperienza per l'utente.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.

Oltre a reindirizzare AppData, ben note cartelle di Windows (System32, programmi (x86), e così via) vengono unite in modo dinamico con le directory corrispondenti nel pacchetto dell'app.In addition to redirecting AppData, Windows' well-known folders (System32, Program Files (x86), etc) are dynamically merged with corresponding directories in the app package. Ogni pacchetto contiene nella radice una cartella denominata "VFS".Each package contains a folder named "VFS" at its root. Le letture delle directory o dei file nella directory VFS vengono unite in fase di esecuzione con le rispettive controparti native.Any reads of directories or files in the VFS directory are merged at runtime with their respective native counterparts. Ad esempio, un'applicazione potrebbe contenere C:\Programmi Files\WindowsApps\package_name\VFS\SystemX86\vc10.dll come parte del pacchetto dell'app, ma avrebbe il file sembrerebbe installato in 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. Questo consente di mantenere la compatibilità con le applicazioni desktop che potrebbero aspettarsi che i file si trovino in percorsi esterni al pacchetto.This maintains compatibility with desktop applications that may expect files to live in non-package locations.

Le scritture in file e cartelle nel pacchetto dell'app non sono consentite.Writes to files/folders in the app package are not allowed. Le scritture in file e cartelle che non fanno parte del pacchetto vengono ignorate dal bridge e sono consente, a condizione che l'utente abbia le autorizzazioni.Writes to files and folders that are not part of the package are ignored by the bridge and are allowed as long as the user has permission.

Operazioni comuniCommon operations

Questa breve tabella di riferimento mostra le operazioni comuni sul file system e come vengono gestite dal bridge.This short reference table shows common file system operations and how the bridge handles them.

OperazioneOperation RisultatoResult EsempioExample
Lettura o enumerazione di una cartella o un file noto di WindowsRead or enumerate a well-known Windows file or folder Unione dinamica di C:\Programmi\nome_pacchetto\VFS\cartella_nota con l'equivalente di sistema locale.A dynamic merge of C:\Program Files\package_name\VFS\well_known_folder with the local system counterpart. La lettura di C:\Windows\System32 restituisce i contenuti di C:\Windows\System32 più i contenuti di C:\Programmi\WindowsApps\nome_pacchetto\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.
Scrittura in AppDataWrite under AppData Copia su scrittura in un percorso per ogni singolo utente e ogni singola app.Copy-on-written to a per-user, per-app location. AppData si trova in genere in C:\Utenti\nome_utente\AppData.AppData is typically C:\Users\user_name\AppData.
Scrittura all'interno del pacchettoWrite inside the package Operazione non consentita.Not allowed. Il pacchetto è di sola lettura.The package is read-only. Le scritture in C:\Programmi\WindowsApps\nome_pacchetto non sono consentite.Writes under C:\Program Files\WindowsApps\package_name are not allowed.
Scritture all'esterno del pacchettoWrites outside the package Consentite se l'utente dispone delle autorizzazioni.Allowed if the user has permissions. Un'operazione di scrittura in C:\Windows\System32\foo.dll è consentita se il pacchetto non contiene C:\Programmi\WindowsApps\nome_pacchetto\VFS\SystemX86\foo.dll e l'utente ha le autorizzazioni.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.

Percorsi dei pacchetti VSFPackaged VFS locations

La tabella seguente illustra i percorsi in cui i file inclusi nel pacchetto vengono sovrapposti nel sistema per l'app.The following table shows where files shipping as part of your package are overlaid on the system for the app. Questi file trovino nei percorsi di sistema indicati, mentre in realtà si trovano nei percorsi reindirizzati C:\Programmi Files\WindowsApps\package_name\VFSavrà la percezione dell'applicazione.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. I percorsi FOLDERID derivano da costanti KNOWNFOLDERID.The FOLDERID locations are from the KNOWNFOLDERID constants.

Percorso di sistemaSystem Location Percorso reindirizzato (in [PackageRoot]\VFS)Redirected Location (Under [PackageRoot]\VFS) Architetture interessateValid 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 Dati applicazioni comuniCommon 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

Registro di sistemaRegistry

I pacchetti delle app contengono un file registry.dat che funge da equivalente logico di HKLM\Software nel Registro di sistema reale.App packages contain a registry.dat file, which serves as the logical equivalent of HKLM\Software in the real registry. In fase di esecuzione, questo Registro di sistema virtuale unisce il contenuto di questo hive con l'hive di sistema nativo per fornire una vista singola di entrambi.At runtime, this virtual registry merges the contents of this hive into the native system hive to provide a singular view of both. Se, ad esempio, registry.dat contiene una singola chiave "Foo", un'operazione di lettura di HKLM\Software in fase di esecuzione conterrà anch'essa "Foo" (oltre a tutte le chiavi di sistema native).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).

Solo le chiavi in HKLM\Software fanno parte del pacchetto, mentre quelle in HKCU o in altre parti del Registro di sistema no.Only keys under HKLM\Software are part of the package; keys under HKCU or other parts of the registry are not. Le scritture in chiavi o valori del pacchetto non sono consentite.Writes to keys or values in the package are not allowed. Scritture in chiavi o valori non sono consentiti parte del pacchetto, purché l'utente dispone dell'autorizzazione.Writes to keys or values not part of the package are allowed as long as the user has permission.

Per tutte le scritture in HKCU, viene eseguita una copia su scrittura in un percorso privato per ogni singolo utente e ogni singola app.All writes under HKCU are copy-on-written to a private per-user, per-app location. In genere, i programmi di disinstallazione non sono in grado di pulire HKEY_CURRENT_USER perché i dati del Registro di sistema per gli utenti disconnessi sono smontati e non sono disponibili.Traditionally, uninstallers are unable to clean HKEY_CURRENT_USER because the registry data for logged out users is unmounted and unavailable.

Tutte le scritture vengono conservate durante l'aggiornamento del pacchetto ed eliminate solo quando l'applicazione viene completamente rimossa.All writes are kept during package upgrade and only deleted when the application is removed entirely.

Operazioni comuniCommon operations

Questa breve tabella di riferimento mostra le operazioni comuni sul Registro di sistema e come vengono gestite dal bridge.This short reference table shows common registry operations and how the bridge handles them.

OperazioneOperation RisultatoResult EsempioExample
Lettura o enumerazione di HKLM\SoftwareRead or enumerate HKLM\Software Unione dinamica dell'hive del pacchetto con l'equivalente di sistema locale.A dynamic merge of the package hive with the local system counterpart. Se registry.dat contiene una singola chiave "Foo", un'operazione di lettura di HKLM\Software mostrerà i contenuti sia di HKLM\Software che di 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.
Scritture in HKCUWrites under HKCU Copia su scrittura in un percorso privato per ogni singolo utente e ogni singola app.Copy-on-written to a per-user, per-app private location. Analogo ad AppData per i file.The same as AppData for files.
Scritture all'interno del pacchetto.Writes inside the package. Operazione non consentita.Not allowed. Il pacchetto è di sola lettura.The package is read-only. Le scritture in HKLM\Software non sono consentite se c'è una coppia chiave/valore corrispondente nell'hive del pacchetto.Writes under HKLM\Software are not allowed if a corresponding key/value exist in the package hive.
Scritture all'esterno del pacchettoWrites outside the package Ignorate dal bridge.Ignored by the bridge. Consentite se l'utente dispone delle autorizzazioni.Allowed if the user has permissions. Le scritture in HKLM\Software sono consentite a condizione che non ci sia una coppia chiave/valore corrispondente nell'hive del pacchetto e che l'utente abbia le autorizzazioni di accesso appropriate.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.

DisinstallazioneUninstallation

Quando un pacchetto viene disinstallato dall'utente, vengono rimossi tutti i file e cartelle che si trova in C:\Programmi Files\WindowsApps\package_name , nonché eventuali scritture reindirizzate ad AppData o il Registro di sistema che sono state acquisite durante il processo di creazione del pacchetto.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.

Passaggi successiviNext steps

Trovare risposte alle tue domandeFind answers to your questions

Hai domande?Have questions? Partecipa a Stack Overflow.Ask us on Stack Overflow. Il nostro team monitora queste tag.Our team monitors these tags. Puoi inoltre consultarci qui.You can also ask us here.

Fornire un feedback o proporre suggerimenti sulle funzionalitàGive feedback or make feature suggestions

Vedi UserVoice.See UserVoice.