根據已封裝的應用程式目錄在任何位置建立目錄

為了滿足特定需求,應用程式可能需要檔案出現在其現有的安裝目錄中。 例如,如果特定應用程式預期資料夾中有檔案,例如 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,投影目錄上的 ACL 是什麼? 繼承自父目錄
多個套件可以宣告相同的目錄嗎? 我們不允許多個相關集合宣告相同的目錄。 換句話說,如果有多個封裝宣告相同的目錄,它們必須全部來自相同的相關集合。
一個以上的發行者呢? No
如何處理衝突? 封裝和/或預先存在的檔案會合併。 衝突的檔案會依指定的優先順序或依字母順序依字母順序解析,如果未指定任何順序,則會依字母順序解析衝突的檔案