2010-11-24 171 views
35

我知道如何设置权限的文件夹:维克斯:如何设置文件夹的权限和所有子文件夹

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

不过,我需要的权限被应用到所有子文件夹以及。这可能与列出所有文件夹?

回答

35

首先,我会建议你用PermissionEx来代替。这是一个标准的WiX扩展,它拥有超过权限的巨大优势 - 它不会覆盖,但会修改ACL。默认情况下,它将权限应用于文件夹及其所有后代文件和文件夹,因此您不必指定任何额外的内容。

希望这会有所帮助。

+0

可以为用户提供PermissionEx一个例子吗?我在CreateFolder标签中使用它,但收到错误“缺少所需的属性SDDL”。我也有用户和GenericAll属性的“属性没有声明”错误。谢谢 – 2012-12-04 13:44:16

+7

这是因为你使用标准的`PermissionEx`元素,它支持从MSI 5.0开始支持。它具有不同的签名,并且它期望SDDL属性。你应该像这样包含`UtilExtension`:`xmlns:util =“http:// schemas.microsoft.com/wix/UtilExtension`并且引用它像`` – 2012-12-04 14:06:03

21

我解决:不同PermissionEx在维克斯和的Util模式(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> 
14
<DirectoryRef Id="INSTALLFOLDER"> 
     <Component Id="INSTALLFOLDER_Permission" Guid="*"> 
      <CreateFolder> 
       <util:PermissionEx User="Users" GenericAll="yes"/> 
      </CreateFolder> 
     </Component> 
    </DirectoryRef> 

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

但要注意:CreateFolder标签应该位于组件中,并且此组件需要添加到Feature中。

此外,你必须把它添加到编译器的命令行链接:

-ext WixUIExtension -ext WixUtilExtension