為了滿足特定需求,應用程式可能需要檔案出現在其現有的安裝目錄中。 例如,如果特定應用程式預期資料夾中有檔案,例如 C:\Program Files\Contoso;系統管理員可以修改該目錄。 從 Windows 11 開始,應用程式可以指定 WindowsApps 目錄以外的目錄,而 OS 將確保檔案會出現在該位置,並具有繼承自父目錄的適當 ACL。
將目錄的位置宣告於清單中
若要啟用此功能,封裝必須宣告將封裝中的檔案投影到何處。 以下是範例
<Package...>
<Extensions>
<desktop8:Extension Category="windows.MutablePackageDirectories">
<desktop8:MutablePackageDirectories>
<desktop8:MutablePackageDirectory target="$(package.volumeroot)\Program Files\<Folder>" Shared=”true”>
</desktop8:MutablePackageDirectories>
</Extension>
</Extensions>
</Package>
投影的考慮
使用這項功能之前,以下是考慮清單:
| 考慮事項 | 說明 |
|---|---|
| 如何安裝能夠投影的套件? | 套件必須透過 ProvisionPackageForAllUsers API 安裝 |
| 誰可以安裝它(用戶或系統管理員)? | 管理員 |
| 檔案可以投影到何處(鎖定的位置或任何地方)? | 除了 %pf%\windowsapps 或 %pf%\modifiablewindowsapps 之外的任何位置 |
| 如果我們建立該目錄,該目錄上的 ACL 是什麼? | 繼承自父目錄 |
| 多個套件可以宣告相同的目錄嗎? | 我們不允許多個相關集合宣告相同的目錄。 換句話說,如果有多個封裝宣告相同的目錄,它們必須全部來自相同的相關集合。 |
| 一個以上的發行者呢? | 否 |
| 如何處理衝突? | 套件和/或已有的檔案合併。 衝突的檔案將依指定的優先順序解析,若未指定順序,則依照套件名稱的字母順序解析。 |