我提供给Wix编译器以为我的应用程序构建MSI包的Wix源代码包含以下PermissionEx
指令,该指令是Windows Installer应该额外安装的文件组件的一部分(对于那些被默认继承)权限:
<PermissionEx Sddl="D:AR(A;;FW;;;BU)" />
您可以推测,我打算在文件的ACL中安装具有继承权限(“ AR”)的文件,最重要的是,允许内置用户组(“ BU”)的成员(“ A”)写入文件(“ FW”)。
上面的代码没有达到预期的效果-已安装该文件,但仅列出了单个显式ACE,没有一个应该从父文件夹继承的ACE。
相反,如果我随后从文件中删除所有权限并运行cacls file /S:D:AR(A;;FW;;;BU)
,即指定完全相同的SDDL字符串,则它确实可以按预期工作-父级的权限被继承并构成ACL的一部分,以及显式的非继承ACE。
我使用的是Wix 3.11.1.2318,Windows Installer版本为5.0.16299.611,所有运行在Windows 10 Enterprise 64位上。 Orca告诉我嵌入在我构建的MSI文件中的MsiLockPermissionsEx
表中已填充了预期的SDDL记录。那么,为什么在不继承其包含文件夹权限的情况下创建文件?
我尝试使用“ AI”代替“ AR”,并且两个字符串都一起使用,但是它们都不起作用。
这是Windows Installer的某些已知限制或怪癖吗?我知道人们早在谈论旧的LockPermissions
表(为Windows Installer版本5之前的版本指定的表)在此特定方面(继承的权限)是不够的,但是他们还说Microsoft是用新的表格功能解决这个问题。
否则我在做什么错了?
答案 0 :(得分:3)
在Util扩展中查看WiX的自定义PermissionEx。
http://wixtoolset.org/documentation/manual/v3/xsd/util/permissionex.html
答案 1 :(得分:2)
鉴于您在这一领域的知识,您可能已经尝试过了。消除许可的需求也将更好,但是为您提供了两个摘要-请注意 Append
属性:
在Visual Studio中创建一个WiX项目。将Util名称空间添加到WiX元素:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
在Visual Studio项目中,右键单击“引用”,然后添加对 "%ProgramFiles(x86)%\WiX Toolset v3.11\bin\WixUtilExtension.dll"
的引用。
权限文件夹 :
<Component Feature="ProductFeature" Id="Test.exe" Guid="PUT-GUID-HERE">
<File Source="C:\Test.exe" />
<CreateFolder>
<util:PermissionEx User="Power Users" GenericWrite="yes" />
</CreateFolder>
</Component>
权限文件 :
<Component>
<File Source="C:\Test2.exe">
<util:PermissionEx Append="yes" User="Users" GenericWrite="yes" />
</File>
</Component>