为Wix / Windows Installer安装的文件指定权限时,如何包括继承的权限?

时间:2019-03-13 15:14:14

标签: wix windows-installer msiexec

我提供给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是用新的表格功能解决这个问题。

否则我在做什么错了?

2 个答案:

答案 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>