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

标签 wix windows-installer

我提供给 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 字符串,它确实按预期工作——来自父级的权限是继承的,并与显式非继承的 ACE 一起构成 ACL 的一部分。

我使用的是 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 版本指定的表)在这个特定方面是不充分的——即继承的权限——但他们也表示微软打算通过新的表格功能解决这个问题。

否则我做错了什么?

最佳答案

鉴于您在这个领域的知识,您可能已经尝试过这个。消除对许可的需求也会好得多,但有两个片段供您使用 - 请注意 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 项目中,右键单击 References 并添加对 "%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>

关于wix - 为 Wix/Windows Installer 安装的文件指定权限时如何包含继承权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55145282/

相关文章:

azure-devops - VSTS 构建未使用 .vdproj 生成 .msi 文件

windows - 在 WIX 中立即执行自定义操作

wix - 将条目添加到 MSI UpgradeTable 以删除相关产品

wix - 安装程序中未包含 Fragment 中的 InstallExecuteSequence

windows-installer - Msiexec REINSTALL=ALL REINSTALLMODE=vamus 不重新安装任何东西

C# 调试文件夹复制到另一个位置时不运行 exe

c++ - 如何从MSI包中读取产品代码?

wix - 了解 Wix 自定义元素的前后属性

wix - 在 WIX 安装序列中动态更改 CA

wix - 远程负载 : The system cannot find the file '' with type ''