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

问题描述 投票:1回答:2

我提供给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表(早于5的Windows Installer版本指定的表)在这个特定的方面是不合适的 - 继承权限,即 - 但他们也说微软要解决这个问题新表功能非常严重。

否则我做错了什么?

wix windows-installer msiexec
2个回答
3
投票

在Util扩展中查看WiX的自定义PermissionEx。

http://wixtoolset.org/documentation/manual/v3/xsd/util/permissionex.html


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>
© www.soinside.com 2019 - 2024. All rights reserved.