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

Posted

技术标签:

【中文标题】Wix:如何设置文件夹和所有子文件夹的权限【英文标题】:Wix: How to set permissions for folder and all sub folders 【发布时间】:2011-05-15 10:01:18 【问题描述】:

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

<DirectoryRef Id="ProgramFilesFolder">
  <Directory Id="phpFolder" Name="PHP">
    <Component Id="PHP_comp" DiskId="1" Guid="*">
      <CreateFolder>
        <Permission User="Everyone" GenericAll="yes" />
      </CreateFolder>

但是,我还需要将权限应用于所有子文件夹。如果不列出所有文件夹,这可能吗?

【问题讨论】:

【参考方案1】:
<DirectoryRef Id="INSTALLFOLDER">
        <Component Id="INSTALLFOLDER_Permission" Guid="*">
            <CreateFolder>
                <util:PermissionEx User="Users" GenericAll="yes"/>
            </CreateFolder>
        </Component>
    </DirectoryRef>

上面的答案是正确的,你会设置这个文件夹下所有文件夹和文件的权限。

请注意:CreateFolder标签应该在一个组件中,并且这个组件必须添加到一个Feature中。

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

-ext WixUIExtension -ext WixUtilExtension

【讨论】:

仅使用PermissionEx 不需要添加对WixUIExtension 的引用,但是+1 用于提供命令行参数,以便像我这样的WiX 新手也能理解添加这样的参数。 他这样做是因为他使用的是 WixUIExtension 中指定的 PermissionEx,而不是基于 MSI 的普通 PermissionEx,后者将 SDDL 作为属性。他们有相同的名字,但非常不同。 我是否需要在任何地方引用该组件 ID INSTALLFOLDER_Permission 那不编译。错误如下: Component/@Guid 属性的值 '*' 对此组件无效,因为它不符合自动生成 guid 的条件。使用 Directory 作为 KeyPath 或包含 ODBCDataSource 子元素的组件不能使用自动生成的 guid。 (...)【参考方案2】:

我解决了:Wix 和 Util 模式中定义了不同的 PermissionEx(Wix PermissionEx 和 Util Extension PermissionEx)

我用的是Util版本:

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

【讨论】:

【参考方案3】:

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

希望这会有所帮助。

【讨论】:

你能提供一个 PermissionEx 的例子吗?我在 CreateFolder 标记中使用它,但收到错误“缺少所需的属性 SDDL”。我还有带有“未声明属性”错误的 User 和 GenericAll 属性。谢谢 那是因为您使用的是标准的PermissionEx 元素,从 MSI 5.0 开始支持该元素。它具有不同的签名,并且需要 SDDL 属性。你应该像这样包含UtilExtensionxmlns:util="http://schemas.microsoft.com/wix/UtilExtension,并像&lt;util:PermissionEx&gt;一样引用它 我在阅读您的评论之前写了回复。非常感谢 太好了,帮助了我。在 标签中使用它 @YanSklyarenko 考虑使用来自 cmets 的额外信息更新您的答案。无需阅读 cmets 即可了解全貌。此外,您的回答非常简洁,举个例子会有所帮助。 :)

以上是关于Wix:如何设置文件夹和所有子文件夹的权限的主要内容,如果未能解决你的问题,请参考以下文章

Wix:使用permissionEx设置安装文件夹中文件夹的权限

在wix的子文件夹中添加所有项目

如何控制共享文件夹与里面的子文件夹访问权限

如何在 PHP 中为文件夹及其所有子文件夹和文件设置 chmod? [复制]

WiX工具集:安装具有特定权限的文件

编辑和重置所有文件夹、子文件夹和文件的权限