バック グラウンドでのパッケージ化されたデスクトップ アプリケーションBehind the scenes of your packaged desktop application

この記事では、お客様のデスクトップ アプリケーションの Windows アプリ パッケージを作成するときにファイルおよびレジストリ エントリを行う詳細を提供します。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.

最新のパッケージの重要な目標は、他のアプリとの互換性を維持しながらできるだけ多くのシステム状態からアプリケーションの状態を分離します。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. Windows 10 では、ユニバーサル Windows プラットフォーム (UWP) のパッケージ内でアプリケーションを配置することを検出し、アプリケーションは、ファイル システムや実行時にレジストリをいくつかの変更をリダイレクトすることでこれを実現します。Windows 10 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.

お客様のデスクトップ アプリケーション用に作成したパッケージでは、デスクトップ専用、完全に信頼されたアプリケーションは、仮想化されたまたはサンド ボックスではありません。Packages that you create for your desktop application are desktop-only, full-trust applications and are not virtualized or sandboxed. このため、従来のデスクトップ アプリケーションと同じように、他のアプリとやり取りすることが可能です。This allows them to interact with other apps the same way classic desktop applications do.

インストールInstallation

アプリ パッケージは C:\Program Files\WindowsApps\package_name にインストールされ、実行可能プログラム名は app_name.exe になります。App packages are installed under C:\Program Files\WindowsApps\package_name, with the executable titled app_name.exe. 各パッケージ フォルダーには、パッケージ アプリ用の XML 名前空間を含むマニフェスト (AppxManifest.xml という名前) が含まれています。Each package folder contains a manifest (named AppxManifest.xml) that contains a special XML namespace for packaged apps. マニフェスト ファイル内の <EntryPoint> 要素で、完全信頼アプリを参照します。Inside that manifest file is an <EntryPoint> element, which references the full-trust app. そのアプリケーションを起動するときに、アプリ コンテナー内では実行されませんが、代わりにそのユーザーとして実行される、通常どおりです。When that application is launched, it does not run inside an app container, but instead it runs as the user as it normally would.

展開後、パッケージ ファイルは読み取り専用としてマークされ、オペレーティング システムによって厳重にロックダウンされます。After deployment, package files are marked read-only and heavily locked down by the operating system. これらのファイルが改ざんされると、Windows によりアプリの起動が回避されます。Windows prevents apps from launching if these files are tampered with.

ファイル システムFile system

OS は、さまざまなレベルのフォルダーの場所に応じて、パッケージのデスクトップ アプリケーションのファイル システム操作をサポートします。The OS supports different levels of file system operations for packaged desktop applications, depending on the folder location.

Windows 10、バージョンが 1903 およびそれ以降の AppData 操作AppData operations on Windows 10, version 1903 and later

新しく作成されたすべてのファイルとフォルダー、ユーザーの AppData フォルダーに (例: C:\Users\user_name\AppData) アプリごとの場所が、実際の AppData の場所に表示される実行時にマージがプライベート、ユーザーごとに書き込まれます。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. これにより、ある程度は、アプリケーション自体でのみ使用している成果物の状態を分離し、これにより、アプリケーションのアンインストール時にそれらのファイルをクリーンアップするシステムです。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. 高度な互換性とアプリケーションと OS 間の対話性を防ぐため、ユーザーの AppData フォルダーの下の既存のファイルへの変更が許可されます。Modifications to existing files under the user's AppData folder is allowed to prevent a higher degree of compatibility and interactivity between applications and the OS. これにより、OS はアプリケーションによって行われたすべてのファイルまたはディレクトリの変更を認識しているために、filesystem"rot"が減少します。This reduces filesystem “rot” because the OS is aware of every file or directory change made by an application. 状態分離により、パッケージのデスクトップ アプリケーションにパッケージ化されたバージョンの同じアプリケーションが中断から再開します。State separation also allows packaged desktop applications to pick up where a non-packaged version of the same application left off. ユーザーの AppData フォルダーの仮想ファイル システム (VFS) フォルダーは OS によってサポートされていないことに注意してください。Note that the OS does not support a virtual file system (VFS) folder for the user's AppData folder.

Windows 10、1809 およびそれ以前のバージョンの AppData 操作AppData operations on Windows 10, version 1809 and earlier

すべての書き込みをユーザーの AppData フォルダー (例: C:\Users\user_name\AppData)、create、delete、および更新プログラムを含む、プライベート、ユーザーごとに、アプリごとの場所に書き込み時にコピーされます。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. これは、パッケージ化されたアプリケーションも、実際にはプライベート コピーを変更する場合に、実際の AppData を編集は錯覚を作成します。This creates the illusion that the packaged application is editing the real AppData when it is actually modifying a private copy. このように書き込みのリダイレクトを行うことで、アプリによって行われたすべてのファイル変更をシステムで追跡できます。By redirecting writes this way, the system can track all file modifications made by the app. これにより、アプリケーションのアンインストール時にそれらのファイルをクリーンアップするシステム、ユーザーのシステム"rot"を削減しより優れたアプリケーションの削除を提供することが発生するためです。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.

その他のフォルダーOther folders

AppData をリダイレクトするだけでなく、動的にアプリ パッケージで対応するディレクトリに Windows のよく知られているフォルダー (System32、Program Files (x86) など) がマージされます。In addition to redirecting AppData, Windows' well-known folders (System32, Program Files (x86), etc) are dynamically merged with corresponding directories in the app package. それぞれのパッケージのルート ディレクトリには、"VFS" という名前のフォルダーが含まれています。Each package contains a folder named "VFS" at its root. この VFS ディレクトリ内のディレクトリまたはファイルに対する読み取り操作は、実行時にそれぞれ対応するネイティブ部分にマージされます。Any reads of directories or files in the VFS directory are merged at runtime with their respective native counterparts. たとえば、アプリケーションにはC:\Program Files\WindowsApps\package_name\VFS\SystemX86\vc10.dllでインストールするよう、アプリ パッケージがファイルの一部として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. これにより、ファイルがパッケージ外の場所にあることを想定しているデスクトップ アプリケーションとの互換性が維持されます。This maintains compatibility with desktop applications that may expect files to live in non-package locations.

アプリ パッケージ内のファイルまたはフォルダーへの書き込みは、許可されていません。Writes to files/folders in the app package are not allowed. ファイルとパッケージの一部ではないフォルダーへの書き込みは、OS によっては無視され、ユーザーがアクセス許可を持っている場合に限り許可されます。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.

一般的な操作Common operations

この短い参照テーブルは、一般的なファイル システム操作と、OS での処理方法を示します。This short reference table shows common file system operations and how the OS handles them.

操作Operation 結果Result Example
既知の Windows ファイルまたはフォルダーに対する読み取りまたは列挙Read or enumerate a well-known Windows file or folder C:\Program Files\package_name\VFS\well_known_folder がローカル システムの対応部分に動的にマージされます。A dynamic merge of C:\Program Files\package_name\VFS\well_known_folder with the local system counterpart. C:\Windows\System32 の読み取りでは、C:\Windows\System32 の内容と 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.
AppData 内の書き込みWrite under AppData Windows 10、バージョンが 1903 以降: 新しいファイルとフォルダーは、次のディレクトリの下に作成は、ユーザー パッケージごとにプライベートな場所にリダイレクトされます。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:
  • ローカルLocal
  • Local\MicrosoftLocal\Microsoft
  • RoamingRoaming
  • Roaming\MicrosoftRoaming\Microsoft
  • Roaming\Microsoft\Windows\Start Menu\ProgramsRoaming\Microsoft\Windows\Start Menu\Programs
ファイルを開くコマンドに応答して、OS は - ユーザーからファイルを開く、あたり-パッケージ場所最初。In response to a file open command, the OS will open the file from the per-user, per-package location first. この場所が存在しない場合、OS は実際の AppData の場所からファイルを開くしようとします。If this location doesn't exist, the OS will attempt to open the file from the real AppData location. 実際の AppData の場所から、ファイルを開く場合は、そのファイルの仮想化は行われません。If the file is opened from the real AppData location, no virtualization for that file occurs. ユーザーがアクセス許可を持っている場合、AppData ファイルの削除は許可されます。File deletes under AppData are allowed if user has permissions.

Windows 10、1809 およびそれ以前のバージョン: 書き込み時に、ユーザーごと、アプリごとの場所にコピーされます。Windows 10, version 1809 and earlier: Copy-on-written to a per-user, per-app location.

AppData は通常、C:\Users\user_name\AppData です。AppData is typically C:\Users\user_name\AppData.
パッケージ内の書き込みWrite inside the package 許可しない。Not allowed. パッケージは読み取り専用です。The package is read-only. C:\Program Files\WindowsApps\package_name 内の書き込みは、許可されていません。Writes under C:\Program Files\WindowsApps\package_name are not allowed.
パッケージ外の書き込みWrites outside the package ユーザーにアクセス許可があれば、許可されます。Allowed if the user has permissions. C:\Windows\System32\foo.dll への書き込みは、パッケージに C:\Program Files\WindowsApps\package_name\VFS\SystemX86\foo.dll が含まれておらずユーザーにアクセス許可があれば許可されます。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.

パッケージ化された VFS の場所Packaged VFS locations

次の表は、パッケージの一部として含まれるファイルが、システム上でアプリのためにどのように配置されるかを示しています。The following table shows where files shipping as part of your package are overlaid on the system for the app. アプリケーションの認識は、これらのファイルを実際の内部リダイレクトされた場所にいるときに表示されているシステムの場所である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. FOLDERID の場所は KNOWNFOLDERID 定数で示されます。The FOLDERID locations are from the KNOWNFOLDERID constants.

システムの場所System Location リダイレクトの場所 ([PackageRoot] の下 \VFS)Redirected Location (Under [PackageRoot]\VFS) 有効なアーキテクチャValid on architectures
FOLDERID_SystemX86FOLDERID_SystemX86 SystemX86SystemX86 x86、amd64x86, amd64
FOLDERID_SystemFOLDERID_System SystemX64SystemX64 amd64amd64
FOLDERID_ProgramFilesX86FOLDERID_ProgramFilesX86 ProgramFilesX86ProgramFilesX86 x86、amd64x86, 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 一般的な AppDataCommon 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

レジストリRegistry

アプリ パッケージには、registry.dat ファイルが含まれています。このファイルは、実際のレジストリ内の HKLM\Software に論理的に対応しています。App packages contain a registry.dat file, which serves as the logical equivalent of HKLM\Software in the real registry. 実行時には、この仮想レジストリのハイブの内容がネイティブ システム ハイブにマージされ、両方が一括して表示されます。At runtime, this virtual registry merges the contents of this hive into the native system hive to provide a singular view of both. たとえば、registry.dat に単一のキー "Foo" が含まれている場合、実行時に HKLM\Software を読み取ると、(すべてのネイティブ システム キーに加えて) "Foo" も含まれているように表示されます。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).

パッケージに含まれる部分は HKLM\Software 以下のキーのみです。HKCU 以下のキーやレジストリの他の部分は、パッケージに含まれていません。Only keys under HKLM\Software are part of the package; keys under HKCU or other parts of the registry are not. パッケージ内のキーまたは値への書き込みは許可されていません。Writes to keys or values in the package are not allowed. 書き込むキーまたは値をユーザーがアクセス許可を持っている限り、パッケージの一部が許可されます。Writes to keys or values not part of the package are allowed as long as the user has permission.

HKCU 以下の書き込みはすべて、書き込み時にユーザーごと、アプリごとのプライベートな場所にコピーされます。All writes under HKCU are copy-on-written to a private per-user, per-app location. 従来、ログアウトしたユーザーのレジストリ データはマウント解除され使用できなくなるため、アンインストーラーが HKEY_CURRENT_USER をクリーンアップできませんでした。Traditionally, uninstallers are unable to clean HKEY_CURRENT_USER because the registry data for logged out users is unmounted and unavailable.

すべての書き込みはパッケージのアップグレード中に保持し、アプリケーションが完全に削除する場合のみ削除します。All writes are kept during package upgrade and only deleted when the application is removed entirely.

一般的な操作Common operations

この短い参照テーブルは、レジストリの一般的な操作と、OS での処理方法を示します。This short reference table shows common registry operations and how the OS handles them.

操作Operation 結果Result Example
HKLM\Software に対する読み取りまたは列挙Read or enumerate HKLM\Software パッケージのハイブがローカル システムの対応部分に動的にマージされます。A dynamic merge of the package hive with the local system counterpart. registry.dat に単一のキー "Foo" が含まれている場合、実行時に HKLM\Software を読み取ると、HKLM\SoftwareHKLM\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.
HKCU 以下の書き込みWrites under HKCU 書き込み時に、ユーザーごと、アプリごとのプライベートな場所にコピーされます。Copy-on-written to a per-user, per-app private location. ファイルの AppData と同じです。The same as AppData for files.
パッケージ内の書き込みWrites inside the package. 許可しない。Not allowed. パッケージは読み取り専用です。The package is read-only. 対応するキー/値がパッケージ ハイブに存在する場合、HKLM\Software 以下の書き込みは許可されません。Writes under HKLM\Software are not allowed if a corresponding key/value exist in the package hive.
パッケージ外の書き込みWrites outside the package OS によって無視されます。Ignored by the OS. ユーザーにアクセス許可があれば、許可されます。Allowed if the user has permissions. HKLM\Software 以下の書き込みは、対応するキー/値がパッケージに含まれておらずユーザーに適切なアクセス許可があれば許可されます。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.

アンインストールUninstallation

すべてのファイルとフォルダーの下にあるユーザーによってパッケージがアンインストールされると、 C:\Program Files\WindowsApps\package_name AppData または中にキャプチャされたレジストリへのリダイレクトされた書き込みと、削除は、パッケージ化処理します。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.

次の手順Next steps

質問の回答を検索Find answers to your questions

ご質問がある場合は、Have questions? Stack Overflow でお問い合わせください。Ask us on Stack Overflow. Microsoft のチームでは、これらのタグをチェックしています。Our team monitors these tags. こちらから質問することもできます。You can also ask us here.

ご意見や機能を提案します。Give feedback or make feature suggestions

UserVoice のページをご覧ください。See UserVoice.