【问题标题】:Wix: How to set permissions for folder and all sub foldersWix:如何设置文件夹和所有子文件夹的权限
【发布时间】: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>

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

【问题讨论】:

    标签: permissions wix installation windows-installer wix-extension


    【解决方案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 PermissionExUtil 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 即可了解全貌。此外,您的回答非常简洁,举个例子会有所帮助。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2015-02-17
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多