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 标记:指定 Util PermissionEx 版本:<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<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 属性。你应该像这样包含UtilExtension
:xmlns:util="http://schemas.microsoft.com/wix/UtilExtension
,并像<util:PermissionEx>
一样引用它
我在阅读您的评论之前写了回复。非常感谢
太好了,帮助了我。在 以上是关于Wix:如何设置文件夹和所有子文件夹的权限的主要内容,如果未能解决你的问题,请参考以下文章
Wix:使用permissionEx设置安装文件夹中文件夹的权限