アプリケーション機能プロファイラー (ACP)
パッケージ化されたアプリケーションから、サンドボックスの外部にあるリソースにアクセスする必要が生じる場合があります。 このようなリソースの例には、ユーザー ファイル、画像、レジストリ項目、カメラ、位置情報、マイクなどがあります。 機能宣言により、サンドボックス化されたアプリケーションはそれらのリソースの一部にアクセスできるようになります。 宣言は、サンドボックス化されたアプリケーションのパッケージ マニフェストで行われます。 「msix-packaging-tool」を参照してください。
アプリケーション機能プロファイラーは、アプリケーション パッケージによって宣言する必要がある機能を特定し、必要なリソース アクセスを付与するために役立つツール セットです。 さらに、アプリケーション パッケージによる失敗したアクセス試行に関する有用な診断情報も提供されます。
重要
この機能はプレビュー段階です: 一部の情報はリリース前の製品に関する内容であり、製品版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
ターゲット システムをプロファイリング用に準備する
ターゲット システムをプロファイリング用にセットアップするには、次の手順が必要です。
ユーザー アカウントに、ターゲットの Windows システムに対する管理者権限があることを確認します。
ターゲット システムで開発者モードを有効にします。 この設定は、Windows の [設定] | [プライバシー & セキュリティ] | [開発者向け] にあります。 詳細については、「デバイスを開発用に有効にする」を参照してください。
PowerShell 7.3 以降をインストールします。 インストール手順については、「Windows への PowerShell のインストール」を参照してください。
これは、Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler モジュールの互換性のために必要です。
Windows Performance Recorder (WPR) がまだインストールされていない場合はインストールし、PATH に追加します。
手順については、「Windows パフォーマンス レコーダー」を参照してください。
Get-Command wpr
アプリケーション機能プロファイラー アーカイブをダウンロードし、使いやすいパスに解凍します。
アプリケーション機能プロファイラー アーカイブは、このプロジェクトのリリース アセットからダウンロードできます。
msix-packaging-tool の指示に従ってアプリケーションをパッケージ化し、ターゲット システムにインストールします。
ターゲット アプリケーション パッケージ マニフェスト (推奨) またはターゲット アプリケーション パッケージの完全名、あるいはその両方を取得します。
(推奨) ターゲット アプリケーション パッケージ マニフェストを取得します。 これを行う最も簡単な方法は、MSIX パッケージ化ツールを使用してマニフェストを開き、マニフェストのコピーを使いやすいパスに保存することです。
PowerShell で次のコマンドを実行して、アプリケーション パッケージの完全名を取得します。
Get-AppxPackage | where-object {$_.name -like '*Test-AppSilo*'}
(オプション) Windows Performance Analyzer をインストールします。 手順については、「Windows Performance Analyzer」を参照してください。 これはプロファイリングに必須ではありませんが、ACP によってキャプチャおよび出力されるデータの一部を視覚化する際に役立つ場合があります。
PowerShell モジュールをインポートします
モジュールに関する情報は、「Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler モジュール」で確認できます。
このモジュールをインポートするには、管理者権限で PowerShell で次のコマンドを実行します。
Import-Module .\Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler.dll
Note
Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler.dll モジュールは、上記の「ターゲット システムをプロファイリング用に準備する」の手順 5 でアーカイブから抽出した ACP フォルダーにあります。
プロファイリングの開始
Start-Profiling コマンドレットは、ターゲット アプリケーション パッケージ マニフェストへのパスまたはアプリケーション パッケージの完全名を取得します。
Start-Profiling は、ターゲット アプリケーション パッケージをトレース ログ用にインストルメント化し、ターゲット アプリケーション パッケージによるアクセス試行に対してトレース ログ プロバイダーを有効にします。 詳細については、「Start-Profiling」を参照してください。
プロファイリングを開始するには、管理者権限で PowerShell を使用して、次のコマンドを実行します。
Start-Profiling -ManifestPath TestApp-AppXManifest.xml
アプリケーション シナリオを実行する
このステップでは、すべてのクリティカルなアプリケーション シナリオを実行することが重要です。 プロファイリング結果の包括性は、このステップで実行するシナリオに左右されます。 実行するアプリケーション シナリオが増えるほど、上記で開始されたトレース ログ セッションによってキャプチャされるデータの量が増え、より完全になります。
プロファイリングの停止
Stop-Profiling コマンドレットは、開始されたアクセス試行トレース ログ セッションを停止し、トレース ログ用にインストルメンテーションされたすべてのアプリケーション パッケージのインストルメンテーションを削除します。
Stop-Profiling は、出力イベント トレース ログ (.etl) ファイルに使用されるパスを制御するオプションのトレース パス パラメーターを受け入れます。 既定では <current_directory>\trace.etl
です。 詳細については、「Stop-Profiling」を参照してください。
プロファイリングを停止するには、管理者権限で PowerShell で次のコマンドを実行します。
Stop-Profiling
プロファイリング結果を取得する
Get-ProfilingResults コマンドレットは、上記の手順で取得したトレース ファイルを解析し、トレース内で識別されたアプリケーション パッケージに必要な機能を検索します。 特定のパッケージへのフィルターが指定されていない限り、トレースで識別されたすべてのアプリケーション パッケージの機能と情報を出力します。
Get-ProfilingResults は、解析するトレース ファイルへのパスを受け入れます。 パスが指定されていない場合、Get-ProfilingResults は Stop-Profiling を呼び出して、解析するトレースの取得を試行します。
Get-ProfilingResults は、オプションでターゲット アプリケーション マニフェストへのパスを受け取ります。 解析されたトレースの情報がターゲット アプリケーション パッケージ マニフェストに起因するものである場合、ファイルは出力機能を使用して直接編集されます。 それ以外の場合は、トレースで識別されたパッケージごとにマニフェストのコピーが作成され、識別された機能が追加されます。
詳細については、「Get-ProfilingResults」を参照してください。
次のコマンドはトレース ファイルを解析し、結果を出力します。
Get-ProfilingResults -EtlFilePaths trace.etl -ManifestPath TestApp-AppXManifest.xml
アプリの再パッケージ化
新しく識別された機能を使用してターゲット アプリケーションを再パッケージ化するには:
- 新しく識別された機能をターゲット アプリケーション パッケージ マニフェストに含めます (Get-ProfilingResults は、マニフェスト (提供されている場合) を直接編集します)。
- msix-packaging-tool の指示に従って、ターゲット アプリケーションを新しい機能で再パッケージ化し、再インストールします。
ヘルパー コマンドレット
Merge-ProfilingResults コマンドレットを使用すると、Get-ProfilingResults の複数回の実行からの出力をマージできます。
プロファイリング出力の解釈
Get-ProfilingResults の出力は次の内容で構成されます。
マニフェスト形式の機能
ユーザーが
-ManifestPath
スイッチを使用して編集するマニフェストを提供し、かつそのマニフェストが属するパッケージが入力トレースで識別された場合、Get-ProfilingResults はマニフェスト ファイルを直接編集して、パッケージのトレースで識別された機能を含めます。 それ以外の場合、Get-ProfilingResults は、トレース ファイルで識別された各パッケージについて、<package full name><manifest name>.xml
という名前のファイルを出力します。このファイルには、対応するパッケージのトレースで識別された機能を格納した<Capabilities>
要素が含まれています。Note
Get-ProfilingResults が識別できる特別な種類の機能が 2 つあります。 出力マニフェスト内では、これらの結果に XML コメントが付きます。
- プライバシー関連機能: これらの機能は、カメラ、位置情報、マイクなど、プライバシーに関連するリソースを保護します。 アプリケーション パッケージがこれらのリソースにアクセスする必要がある場合は、これらの機能を宣言する必要があります。 ただし、機能の宣言だけでは、対象のプライバシー関連リソースへのアプリケーション アクセスを保証するには十分でない可能性があります。 プライバシー設定では、ユーザーはアプリケーションへのリソース アクセスを許可または拒否できます。
- プロンプト機能: Get-ProfilingResults は、プロンプト機能がアプリケーション パッケージに適用される可能性があると判断すると、この機能を "コメント アウト" 形式で出力します。 パッケージ マニフェストで宣言されている場合、アプリケーションはフォールバック プロンプトを選択します。 アプリケーションがプロンプト対象リソースへのアクセスを拒否されるたびに、ユーザー プロンプトが発行されます。 これにより、ユーザーはリソースへのアクセスを明示的に許可または拒否できるようになります。 フォールバック プロンプトは煩わしさにつながりサンドボックスを弱める可能性があるため、クリティカルなアプリケーション シナリオに必要な場合にのみ注意して使用する必要があります。
AccessAttemptRecords.csv
これは、解析されたトレース イベントとアプリケーション パッケージに記録された、失敗した各アクセス試行に関する詳細な診断情報を含む、コンマ区切り値ファイルです。
summary.txt
これは、Get-ProfilingResults のすべての実行の概要です。 実行するたびにこのファイルに追加されます。
-SummaryOutputPath
を使用してこのファイルパスを変更できます。概要には、解析された入力、ターゲット アプリケーション パッケージと実行可能ファイル、識別された機能、編集されたマニフェストの内容のほか、アプリケーション パッケージがアクセスを試みても機能を識別できなかったすべてのリソースの概要リストが含まれます。
Note
パッケージ化されると、ターゲット アプリケーションがこれらのリソースにアクセスできなくなる可能性があります。
README.txt
このファイルには、Get-ProfilingResults のすべての実行に関する情報が含まれています。 スクリプトが実行されるたびに、このファイルに追加されます。
README には、解析された入力、ターゲット アプリケーション パッケージ、出力されるファイルとそのパス、およびトラブルシューティング ガイドに関する情報が記載されています。
スタック トレース
ACP アーカイブには、ACP-StackTrace.wpaProfile という名前のファイルが含まれています。 これは Windows Performance Analyzer (WPA)のプロファイルです。 Stop-Profiling によってキャプチャされたイベント トレース ログ ファイルに対し、スタック トレースの視覚化を有効にします。 アクセス試行、そのターゲット、および試行を発行したスタックが分類されます。 これにより、ターゲット アプリケーションが特定のリソースにアクセスできない理由をより完全に把握できるようになります。
trace.etl で Stop-Profiling によってキャプチャされたアクセス試行スタックを視覚化するには:
WPA で trace.etl ファイルを開きます。
アプリケーション シンボルと Microsoft パブリック シンボル サーバーを指すように WPA シンボル パスを構成します。
シンボルを読み込みます。
ACP-StackTrace.wpaProfile のプロファイルを適用して、アクセス試行スタックの視覚化を表示します。
関連トピック
Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler