應用程式功能分析工具 (ACP)
封裝的應用程式可能需要存取沙箱外部的資源。 這類資源的範例包括使用者檔案、圖片、登錄專案、相機、位置和麥克風等。 功能宣告可讓沙箱化應用程式存取其中一些資源。 宣告是在沙盒化應用程式的套件指令清單中建立。 如需參考,請參閱 msix-packaging-tool。
應用程式功能分析工具是一組工具,可協助識別應用程式套件可能需要宣告的功能,因此會授與其所需的資源存取權。 此外,它提供應用程式封裝失敗存取嘗試的實用診斷資訊。
重要
這項功能處於預覽狀態: 某些資訊與發行前版本產品有關,在正式發行前可能會大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
準備目標系統以進行分析
設定目標系統以進行分析時,必須執行下列步驟:
請確定您的使用者帳戶具有目標 Windows 系統的系統管理員許可權。
在目標系統上啟用開發人員模式。 您可以在 Windows 設定中找到此設定 |隱私權與安全性 |適用於開發人員。 如需詳細資訊,請參閱 啟用您的裝置以進行開發 。
安裝 PowerShell 7.3 或更新版本。 如需安裝指示,請參閱 在 Windows 上安裝 PowerShell。
這是Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler 模組相容性的必要專案。
如果尚未安裝,請安裝 Windows Performance Recorder (WPR),並將其新增至 PATH。
如需指示,請參閱 Windows Performance Recorder 。
Get-Command wpr
下載應用程式功能分析工具封存,並將其解壓縮到方便的路徑。
您可以從此專案的 發行資產下載應用程式功能分析工具封存。
請遵循 msix-packaging-tool 上的指示來封裝應用程式,並將其安裝在目標系統上。
取得目標應用程式套件指令清單(建議)和/或目標應用程式套件完整名稱。
(建議) 取得目標應用程式套件指令清單。 若要這樣做,最簡單的方式是使用 MSIX 封裝工具來 開啟它,並將指令清單的複本儲存到方便的路徑。
在 PowerShell 中執行下列命令,以取得應用程式套件完整名稱:
Get-AppxPackage | where-object {$_.name -like '*Test-AppSilo*'}
(選擇性)安裝 Windows 效能分析器。 如需指示,請參閱 Windows 效能分析器。 這並非分析的必要專案,但有助於將 ACP 所擷取和輸出的一些數據可視化。
匯入 PowerShell 模組
您可以在這裡找到模組的相關信息: Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler。
在 PowerShell 中以系統管理員許可權執行下列命令,以匯入模組:
Import-Module .\Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler.dll
注意
Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler.dll 模組位於從封存擷取的ACP資料夾中,於上述準備目標系統以進行分析指示的步驟5中。
開始分析
Start-Profiling Cmdlet 會採用目標應用程式套件指令清單的路徑或應用程式套件的完整名稱。
Start-Profiling 會檢測目標應用程式套件以進行追蹤記錄,並啟用追蹤記錄提供者,以存取目標應用程式封裝所做的存取嘗試。 如需詳細資訊,請參閱 開始分析 。
使用系統管理員許可權在 PowerShell 中執行下列命令,以開始分析:
Start-Profiling -ManifestPath TestApp-AppXManifest.xml
執行應用程式案例
在此步驟中,請務必執行所有重要的應用程式案例。 程式代碼剖析結果與此步驟中執行的案例一樣全面。 執行的應用程式案例越多,追蹤記錄會話所擷取的數據量就越大且更完整。
停止分析
Stop-Profiling Cmdlet 會停止已啟動的存取嘗試追蹤記錄會話,並移除任何已檢測用於追蹤記錄的應用程式套件檢測。
Stop-Profiling 接受選擇性的追蹤路徑參數,可控制輸出事件追蹤記錄檔 (.etl) 檔案所使用的路徑。 預設為 <current_directory>\trace.etl
。 如需詳細資訊,請參閱 停止分析 。
使用系統管理員許可權在 PowerShell 中執行下列命令,以停止分析:
Stop-Profiling
取得分析結果
Get-ProfilingResults Cmdlet 會剖析從上述步驟取得的追蹤檔案,並尋找追蹤中識別的應用程式套件所需的功能。 它會輸出追蹤中所識別之每個應用程式封裝的功能和資訊,除非已指定特定封裝的篩選條件。
Get-ProfilingResults 接受要剖析之追蹤檔案的路徑。 如果未提供路徑, Get-ProfilingResults 會嘗試叫 用 Stop-Profiling 以取得要剖析的追蹤。
Get-ProfilingResults 選擇性地採用目標應用程式指令清單的路徑。 如果剖析追蹤中的資訊可以歸因於目標應用程式套件指令清單,則會使用輸出功能直接編輯檔案。 否則,會針對追蹤中所識別的每個套件建立指令清單複本,並新增已識別的功能。
如需詳細資訊,請參閱 Get-ProfilingResults 。
下列命令會剖析追蹤檔案並輸出結果:
Get-ProfilingResults -EtlFilePaths trace.etl -ManifestPath TestApp-AppXManifest.xml
重新封裝應用程式
若要使用新識別的功能重新封裝目標應用程式:
- 在目標應用程式套件指令清單中包含新識別的功能(Get-ProfilingResults 會在提供時直接編輯指令清單)。
- 請遵循 msix-packaging-tool 中的指示,使用新功能重新封裝目標應用程式,然後重新安裝。
Helper Cmdlet
Merge-ProfilingResults Cmdlet 可用來合併 Get-ProfilingResults 多個回合的輸出。
解譯分析輸出
Get-ProfilingResults 的輸出包含下列各項:
指令清單格式的功能
如果使用者提供要以 參數編輯
-ManifestPath
的指令清單,而且指令清單所屬的封裝是在輸入追蹤中識別出來,Get-ProfilingResults 會直接編輯指令清單檔,以包含封裝追蹤中識別的功能。 否則,針對追蹤檔案中識別的每個封裝, Get-ProfilingResults 會輸出名為<package full name><manifest name>.xml
的檔案,其中包含<Capabilities>
對應封裝之追蹤中所識別功能的專案。注意
Get-ProfilingResults 可能會識別兩種特殊功能。 這些結果會以輸出指令清單中的 XML 批註標示。
- 隱私權敏感性功能:這些功能可保護隱私權敏感資源,例如相機、位置和麥克風。 如果應用程式套件需要存取這些資源,則必須宣告這些功能。 不過,僅功能宣告可能不足以確保應用程式存取目標隱私權敏感資源。 在隱私權設定中,使用者仍然可以授與或拒絕應用程式的資源存取權。
- 提示功能: Get-ProfilingResults 會在識別提示功能可能套用至應用程式套件時,以「批注化」形式輸出這項功能。 如果在套件指令清單中宣告,應用程式會 加入加入 後援提示。 每次應用程式拒絕對提示合格資源的存取時,都會發出使用者提示。 這可讓用戶有機會明確授與或拒絕資源的存取權。 後援提示可能會侵入和削弱沙箱,因此應該謹慎使用,最好只在關鍵應用程式案例需要時才使用。
AccessAttemptRecords.csv
這是逗號分隔值檔案,其中包含剖析追蹤事件的詳細診斷資訊,以及針對應用程式封裝記錄的每個失敗存取嘗試。
summary.txt
這是 Get-ProfilingResults 的所有執行摘要。 每次執行都會附加至此檔案。
-SummaryOutputPath
可以用來修改這個檔案路徑。摘要包含剖析的輸入、目標應用程式套件和可執行檔、已識別的功能、編輯的指令清單內容,以及應用程式封裝嘗試存取但未識別任何功能的所有資源摘要清單。
注意
目標應用程式可能無法在封裝時存取這些資源。
README.txt
此檔案包含 Get-ProfilingResults 的所有執行資訊。 每次執行腳本時,它會附加至這個檔案。
自 述檔 提供輸入剖析、目標應用程式套件、檔案輸出及其路徑的相關信息,以及疑難解答指南。
堆疊追蹤
ACP 封存包含名為 ACP-StackTrace.wpaProfile 的檔案。 這是 Windows 效能分析器 (WPA) 的配置檔。 它會針對停止分析所擷取的事件追蹤記錄檔啟用堆疊追蹤視覺效果。 它會細分存取嘗試、其目標,以及發出嘗試的堆疊。 這可讓您更完整地瞭解目標應用程式無法存取特定資源的原因。
若要將 trace.etl 中的 Stop-Profiling 擷取的存取嘗試堆棧可視化:
在 WPA 中開啟 trace.etl 檔案。
設定 WPA 符號路徑以指向應用程式符號和Microsoft公用符號伺服器:
載入符號。
在 ACP-StackTrace.wpaProfile 中套用配置檔,以檢視存取嘗試堆棧視覺效果:
相關主題
Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler