基于打包的应用目录在任何位置创建目录

为了满足某些要求,应用可能需要文件显示在其现有安装目录中。 例如,如果某个特定应用需要文件夹中的文件,例如 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> 

投影注意事项

使用此功能之前,下面是一系列注意事项:

注意事项 DESCRIPTION
如何安装能够投影的包? 包必须通过 ProvisionPackageForAllUsers API 进行安装
谁可以安装它(用户或管理员)? 管理员
文件可以投影到何处(锁定位置,还是任何位置)? 除 %pf%\windowsapps 或 %pf%\modifiablewindowsapps 之外的任何位置
如果创建投影目录,什么是投影目录上的 ACL? 继承自父目录
多个包是否可以声明同一目录? 不允许多个相关集声明同一目录。 换句话说,如果有多个包声明同一目录,它们必须全部来自同一相关集。
多于一个发布者时该怎么办?
如何处理冲突? 将会合并包和/或预先存在的文件。 如果没有指定顺序,冲突的文件按指定的优先级顺序或按包名称的字母顺序解析。