Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema werden die Typen von Desktop-Apps beschrieben, für die Sie ein Windows-App-Paket erstellen können, zusammen mit einigen Betriebssystemverhaltensweisen (Betriebssystem) und anderen Spezifischen, die sie beachten müssen. Wir gehen in Details zu den folgenden Elementen ein (wie wir sehen, hängt das spezifische Verhalten vom Typ Ihrer App ab):
- Der Installationsspeicherort und das Arbeitsverzeichnis Ihrer App (das unterscheidet sich möglicherweise von dem, was Ihre App in der Vergangenheit angenommen hat).
- Das Dateisystem und das Registrierungsverhalten des Betriebssystems.
- Deinstallation.
Typen von Desktop-Apps
Es gibt zwei Arten von Desktop-Apps, die Sie erstellen und verpacken können. Sie deklarieren den Typ Ihrer App im App-Paketmanifest mithilfe des Attributs "uap10:RuntimeBehavior " des Application-Elements :
- Ein Typ umfasst sowohl WinUI 3-Apps (die das Windows App SDK verwenden) als auch Desktop-Brücke-Apps (Centennial). Deklariert mit
uap10:RuntimeBehavior="packagedClassicApp". - Der andere Typ stellt andere Arten von Win32-Apps dar, einschließlich Apps, die mit externem Speicherort verpackt sind. Deklariert mit
uap10:RuntimeBehavior="win32App".
Apps für die universelle Windows-Plattform (uap10:RuntimeBehavior="windowsApp"UWP) werden ebenfalls verpackt. Dieses Thema geht jedoch nicht darum.
Anschließend bestimmt das Attribut "uap10:TrustLevel " (desselben Application-Elements ), ob der Prozess der verpackten App in einem App-Container ausgeführt wird.
- Eine voll vertrauenswürdige App. Deklariert mit
uap10:TrustLevel="mediumIL". - Eine appContainer-App . Deklariert mit
uap10:TrustLevel="appContainer". Wird in einem einfachen App-Container ausgeführt (und wird daher mithilfe der Dateisystem- und Registrierungsvirtualisierung isoliert). Weitere Informationen finden Sie unter MSIX appContainer-Apps.
Von Bedeutung
Weitere Details, Abhängigkeiten und Funktionsanforderungen finden Sie in der Dokumentation zu diesen beiden Attributen in Application. Siehe auch uap10 wurde in Windows 10, Version 2004 eingeführt (10.0; Build 19041).
Der Zweck der Verpackung und App-Container
Der Zweck des Verpackens Ihrer App ist es, ihr zur Laufzeit eine Paketidentität zu verleihen. Die Paketidentität ist für bestimmte Windows-Features erforderlich (siehe Features, die Paketidentität erfordern). Sie können alle oben beschriebenen Kombinationen von App-Typen verpacken (und dadurch von der Paketidentität profitieren).
Ein Hauptziel einer appContainer-App ist jedoch, den App-Zustand so weit wie möglich vom Systemzustand zu trennen und gleichzeitig die Kompatibilität mit anderen Apps aufrechtzuerhalten. Windows erreicht dies, indem es bestimmte Änderungen erkennt und umleitet, die es während der Laufzeit am Dateisystem und an der Registrierung vornimmt (ein Prozess, der als Virtualisierung bekannt ist). Wir werden darauf hinweisen, wenn ein Abschnitt nur für virtuelle Apps gilt.
Einrichtung
App-Pakete werden pro Benutzer statt systemweit installiert. Der Standardspeicherort für neue Pakete auf einem neuen Computer befindet sich unter C:\Program Files\WindowsApps\<package_full_name>, wobei die ausführbare Datei den Namen app_name.exe trägt. Pakete können jedoch an anderen Orten installiert werden; Beispielsweise verwenden die Startbefehle von Visual Studio das Projekt $(OutDir).
Nach der Bereitstellung werden Paketdateien als schreibgeschützt gekennzeichnet und vom Betriebssystem strikt eingeschränkt. Windows verhindert, dass Apps gestartet werden, wenn diese Dateien manipuliert werden.
Der C:\Program Files\WindowsApps Speicherort wird als PackageVolume bezeichnet. Dieser Standort ist das Standardmäßige PackageVolume, mit dem Windows ausgeliefert wird; Sie können jedoch ein PackageVolume auf jedem Laufwerk und auf jedem Pfad erstellen. Darüber hinaus werden nicht alle Pakete in einem PackageVolume installiert (siehe Visual Studio-Beispiel oben).
Dateisystem
Das Betriebssystem unterstützt je nach Ordnerspeicherort unterschiedliche Ebenen von Dateisystemvorgängen für verpackte Desktop-Apps.
Für Ihr Gerät optimiert
Um die Duplizierung von Dateien zu vermeiden (um speicherplatzoptimiert zu werden und die bandbreite zu reduzieren, die beim Herunterladen von Dateien erforderlich ist), nutzt das Betriebssystem einzelnen Speicher und eine feste Verknüpfung von Dateien. Wenn ein Benutzer ein MSIX-Paket herunterlädt, wird dies AppxManifest.xml verwendet, um festzustellen, ob die im Paket enthaltenen Daten bereits auf dem Datenträger einer früheren Paketinstallation vorhanden sind. Wenn dieselbe Datei in mehreren MSIX-Paketen vorhanden ist, speichert das Betriebssystem die freigegebene Datei nur einmal auf dem Datenträger und erstellt Hardlinks von beiden Paketen zur freigegebenen Datei. Da Dateien in 64 KB-Blöcken heruntergeladen werden, auch wenn ein Prozentsatz der heruntergeladenen Datei auf dem Datenträger vorhanden ist, wird nur das Inkrement heruntergeladen, das anders ist. Dadurch wird die zum Herunterladen verwendete Bandbreite reduziert.
AppData-Vorgänge unter Windows 10, Version 1903 und höher
Dieser Abschnitt gilt nur für virtualisierte Apps.
Alle neu erstellten Dateien und Ordner im Ordner des Benutzers AppData (zum Beispiel C:\Users\<user_name>\AppData) werden an einem privaten Speicherort pro Benutzer und App gespeichert. Zur Laufzeit werden sie zusammengeführt, um am tatsächlichen Speicherort AppData zu erscheinen. Dies ermöglicht eine gewisse Zustandstrennung für Artefakte, die nur von der App selbst verwendet werden; damit kann das System diese Dateien bereinigen, wenn die App deinstalliert wird.
Änderungen an vorhandenen Dateien im Ordner des AppData Benutzers sind zulässig, um ein höheres Maß an Kompatibilität und Interaktivität zwischen Apps und dem Betriebssystem bereitzustellen. Dadurch wird der Verfall des Systems verringert, da das Betriebssystem jede Änderung an Dateien oder Verzeichnissen nachverfolgt, die durch eine App verursacht wurde. Die Zustandstrennung ermöglicht es auch, dass verpackte Desktopanwendungen dort weitermachen, wo eine nicht verpackte Version derselben Anwendung aufgehört hat. Beachten Sie, dass das Betriebssystem einen Ordner des virtuellen Dateisystems (VIRTUAL File System, VFS) für den Ordner des AppData Benutzers nicht unterstützt.
AppData-Vorgänge auf OSes vor Windows 10, Version 1903
Dieser Abschnitt gilt nur für virtualisierte Apps.
Alle Schreibvorgänge in den AppData Ordner des Benutzers (z. B. C:\Users\<user_name>\AppData)—, einschließlich Erstellen, Löschen und Aktualisieren—, werden per Schreibzugriff auf einen privaten Benutzer- und App-Speicherort kopiert. Dadurch entsteht die Illusion, dass die App das echte AppData bearbeitet, während sie in Wirklichkeit eine private Kopie ändert. Durch das Umleiten von Schreibvorgängen auf diese Weise kann das System alle von der App vorgenommenen Dateiänderungen nachverfolgen. Dadurch kann das System diese Dateien bei der Deinstallation der App bereinigen, wodurch Systemabnutzung reduziert und eine bessere App-Entfernungserfahrung für den Benutzer ermöglicht wird.
Arbeitsverzeichnis und Anwendungsdateien
Dieser Abschnitt gilt nur für virtualisierte Apps.
Neben der Umleitung AppDatawerden bekannte Windows-Ordner (System32, Program Files (x86)usw.) dynamisch mit den entsprechenden Verzeichnissen im App-Paket zusammengeführt. Jedes Paket enthält einen Ordner, der im Stammverzeichnis benannt ist VFS . Alle Lesevorgänge von Verzeichnissen oder Dateien im VFS Verzeichnis werden zur Laufzeit mit ihren jeweiligen nativen Gegenstücken zusammengeführt. Beispielsweise könnte eine App als Teil des App-Pakets enthalten C:\Program Files\WindowsApps\<package_full_name>\VFS\SystemX86\vc10.dll , die Datei scheint jedoch unter C:\Windows\System32\vc10.dllinstalliert zu sein. Dadurch wird die Kompatibilität mit Desktop-Apps beibehalten, die erwarten, dass Dateien an Nicht-Paketspeicherorten gespeichert sind.
Schreibvorgänge in Dateien/Ordner im App-Paket sind nicht zulässig. Schreibvorgänge in Dateien und Ordner, die nicht Teil des Pakets sind, werden vom Betriebssystem ignoriert und sind zulässig, solange der Benutzer über die Berechtigung verfügt.
Allgemeine Dateisystemvorgänge
Diese kurze Referenztabelle enthält allgemeine Dateisystemvorgänge und deren Verarbeitung durch das Betriebssystem.
| Vorgang | Ergebnis | Beispiel |
|---|---|---|
| Lesen oder Aufzählen einer bekannten Windows-Datei oder eines bekannten Ordners | Eine dynamische Verschmelzung von C:\Program Files\<package_full_name>\VFS\<well_known_folder> mit dem lokalen System-Gegenstück. |
Beim Lesen von C:\Windows\System32 wird der Inhalt von C:\Windows\System32 zusammen mit dem Inhalt von C:\Program Files\WindowsApps\<package_full_name>\VFS\SystemX86 zurückgegeben. |
Bitte unter AppData schreiben |
Windows 10, Version 1903 und höher: Neue Dateien und Ordner, die unter den folgenden Verzeichnissen erstellt wurden, werden an einen privaten Speicherort pro Benutzer umgeleitet:
AppData Speicherort aus zu öffnen. Wenn die Datei vom tatsächlichen AppData Speicherort geöffnet wird, tritt keine Virtualisierung für diese Datei auf. Dateilöschungen unter AppData sind zulässig, wenn der Benutzer über Berechtigungen verfügt.Früher als Windows 10, Version 1903: Kopieren Sie den Schreibvorgang auf einen Benutzer- und App-Speicherort. |
AppData ist in der Regel C:\Users\<user_name>\AppData. |
| Schreiben Sie in der Verpackung | Nicht zulässig Das Paket ist schreibgeschützt. | Schreibvorgänge unter C:\Program Files\WindowsApps\<package_full_name> sind nicht zulässig. |
| Schreibvorgänge außerhalb des Pakets | Zulässig, wenn der Benutzer über Berechtigungen verfügt. | Ein Schreibzugriff C:\Windows\System32\foo.dll ist zulässig, wenn das Paket nicht enthält C:\Program Files\WindowsApps\<package_full_name>\VFS\SystemX86\foo.dll, und der Benutzer über Berechtigungen verfügt. |
Gepackte VFS-Speicherorte
Dieser Abschnitt gilt nur für virtualisierte Apps.
Diese Tabelle zeigt, wo die Dateien, die als Teil des Pakets geliefert werden, auf dem System für die App überlagert sind. Ihre App wird diese Dateien als an den aufgelisteten Systemstandorten wahrnehmen, obwohl sie sich tatsächlich in den umgeleiteten Speicherorten innerhalb von C:\Program Files\WindowsApps\<package_full_name>\VFS befinden. Die FOLDERID-Orte stammen aus den KNOWNFOLDERID-Konstanten.
| Systemstandort | Umgeleiteter Speicherort (unter <Paketstammverzeichnis>\VFS | Gültig für Architekturen |
|---|---|---|
| FOLDERID_SystemX86 | SystemX86 |
x86, amd64 |
| FOLDERID_System | SystemX64 |
amd64 |
| FOLDERID_ProgramFilesX86 | ProgramFilesX86 |
x86, amd6 |
| FOLDERID_ProgramFilesX64 | ProgramFilesX64 |
amd64 |
| FOLDERID_ProgramFilesCommonX86 | ProgramFilesCommonX86 |
x86, amd64 |
| FOLDERID_ProgramFilesCommonX64 | ProgramFilesCommonX64 |
amd64 |
| FOLDERID_Windows | Windows |
x86, amd64 |
| FOLDERID_ProgramData | Allgemeine AppData |
x86, amd64 |
| FOLDERID_System\catroot | AppVSystem32Catroot |
x86, amd64 |
| FOLDERID_System\catroot2 | AppVSystem32Catroot2 |
x86, amd64 |
| FOLDERID_System\drivers\etc | AppVSystem32DriversEtc |
x86, amd64 |
| FOLDERID_System\driverstore | AppVSystem32Driverstore |
x86, amd64 |
| FOLDERID_System\logfiles | AppVSystem32Logfiles |
x86, amd64 |
| FOLDERID_System\spool | AppVSystem32Spool |
x86, amd64 |
Registratur
Dieser Abschnitt (und seine Unterabschnitte) gilt nur für virtualisierte Apps.
App-Pakete enthalten eine registry.dat Datei, die als logische (virtuelle) Entsprechung von HKLM\Software in der realen Registrierung dient. Zur Laufzeit führt diese virtuelle Registrierung den Inhalt dieser Struktur in der nativen Systemstruktur zusammen, um beide Strukturen in einer Ansicht darzustellen. Wenn registry.dat z. B. ein einzelner Schlüssel Foo enthalten ist, wird zur Laufzeit auch ein Lesevorgang von HKLM\Software angezeigt, der Foo enthält (zusätzlich zu allen systemeigenen Systemschlüsseln).
Obwohl MSIX-Pakete HKLM - und HKCU-Schlüssel enthalten, werden sie unterschiedlich behandelt. Nur Schlüssel unter HKLM\Software sind Teil des Pakets; Schlüssel unter HKCU oder anderen Teilen der Windows-Registrierung sind es nicht. Schreibvorgänge für Schlüssel oder Werte im Paket sind nicht zulässig. Schreibvorgänge in Schlüssel oder Werte, die nicht Teil des Pakets sind, sind erlaubt, solange der Benutzer über die Berechtigung verfügt.
Alle Schreibvorgänge unter HKCU entsprechen Kopie bei Schreibvorgang an einem privaten Speicherort pro Benutzer und App. In der Regel können Deinstallationsprogramme nicht HKEY_CURRENT_USER bereinigen, da die Registrierungsdaten für abgemeldete Benutzer nicht zur Verfügung stehen und nicht verfügbar sind.
Alle Schreibvorgänge werden während des Paketupgrades beibehalten und nur gelöscht, wenn die App vollständig entfernt wird.
Allgemeine Registrierungsvorgänge
Die meisten dieser Abschnitte gelten nur für virtualisierte Apps.
Diese kurze Referenztabelle enthält allgemeine Registrierungsvorgänge und deren Verarbeitung durch das Betriebssystem.
| Vorgang | Ergebnis | Beispiel |
|---|---|---|
| Lesen oder Enumerieren von HKLM\Software | Eine dynamische Zusammenführung der Paketstruktur mit der lokalen Systementsprechung. | Wenn registry.dat einen einzelnen Schlüssel Foo enthält, zeigt zur Laufzeit bei einem Lesevorgang von HKLM\Software den Inhalt von sowohl HKLM\Software als auch HKLM\Software\Foo an. |
| Schreibvorgänge unter HKCU | Kopie bei Schreibvorgang an einem privaten Speicherort pro Benutzer und App. | Dasselbe wie AppData für Dateien. |
| Schreibvorgänge im Paket. | Nicht zulässig Das Paket ist schreibgeschützt. | Schreibvorgänge unter HKLM\Software sind nicht zulässig, wenn ein entsprechender Schlüssel/Wert in der Paketstruktur vorhanden ist. |
| Schreibvorgänge außerhalb des Pakets | Vom Betriebssystem ignoriert. Zulässig, wenn der Benutzer über Berechtigungen verfügt. | Schreibvorgänge unter HKLM\Software sind zulässig, solange kein entsprechender Schlüssel/Wert in der Paketstruktur vorhanden ist und der Benutzer über die richtigen Zugriffsberechtigungen verfügt. |
Deinstallation
Dieser Abschnitt gilt nur für virtualisierte Apps.
Wenn ein Paket vom Benutzer deinstalliert wird, werden alle Dateien und Ordner entfernt, die sich unter C:\Program Files\WindowsApps\<package_full_name> befinden, sowie alle umgeleiteten Schreibvorgänge an AppData oder zur Registrierung, die während des Verpackungsvorgangs erfasst wurden.