Wix:如何设置文件夹和所有子文件夹的权限

Mik*_*ike 38 permissions installer windows-installer wix wix-extension

我知道如何设置文件夹的权限:

<DirectoryRef Id="ProgramFilesFolder">
  <Directory Id="PHPFolder" Name="PHP">
    <Component Id="PHP_comp" DiskId="1" Guid="*">
      <CreateFolder>
        <Permission User="Everyone" GenericAll="yes" />
      </CreateFolder>
Run Code Online (Sandbox Code Playgroud)

但是,我还需要将权限应用于所有子文件夹.是否可以列出所有文件夹?

Yan*_*nko 38

首先,我建议您使用PermissionEx.它是一个标准的WiX扩展,它比Permission有一个非常大的优势 - 它不会覆盖,但会修改ACL.默认情况下,它会将权限应用于文件夹及其所有后代文件和文件夹,因此您无需指定任何额外内容.

希望这可以帮助.

  • 那是因为你使用的标准`PermissionEx`元素是从MSI 5.0开始支持的.它有不同的签名,它需要SDDL属性.你应该像这样包含`UtilExtension`:`xmlns:util ="http:// schemas.microsoft.com/wix/UtilExtension`并引用它像`<util:PermissionEx>` (8认同)
  • 你能提供一个 PermissionEx 的例子吗?我在 CreateFolder 标记中使用它,但收到错误“缺少所需的属性 SDDL”。我的 User 和 GenericAll 属性也带有“未声明属性”错误。谢谢 (2认同)

Be.*_*St. 28

我解决了:在Wix和Util架构中定义了不同的PermissionEx(Wix PermissionExUtil Extension PermissionEx)

我使用了Util版本:

  • 添加对WixUtilExtension程序集的引用
  • 将UtilExtension命名空间添加到Wix标记:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
Run Code Online (Sandbox Code Playgroud)
  • 指定Util PermissionEx版本:
<CreateFolder Directory="DirectoryToManage">
    <util:PermissionEx User="Users" GenericAll="yes" />
</CreateFolder>
Run Code Online (Sandbox Code Playgroud)


cdy*_*oby 18

<DirectoryRef Id="INSTALLFOLDER">
        <Component Id="INSTALLFOLDER_Permission" Guid="*">
            <CreateFolder>
                <util:PermissionEx User="Users" GenericAll="yes"/>
            </CreateFolder>
        </Component>
    </DirectoryRef>
Run Code Online (Sandbox Code Playgroud)

上面的答案是正确的,您将设置该文件夹中所有文件夹和文件的权限.

请注意:CreateFolder标记应位于组件中,并且必须将此组件添加到功能部件中.

此外,您必须将此添加到编译器链接器的命令行:

-ext WixUIExtension -ext WixUtilExtension
Run Code Online (Sandbox Code Playgroud)

  • 对于仅使用“ PermissionEx”来说,不需要添加对“ WixUIExtension”的引用,而可以通过+1来提供命令行参数,这样像我这样的WiX新手也可以添加此类。 (2认同)