我提供给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版本指定的表)在这个特定的方面是不合适的 - 继承权限,即 - 但他们也说微软要解决这个问题新表功能非常严重。
否则我做错了什么?
在Util扩展中查看WiX的自定义PermissionEx。
http://wixtoolset.org/documentation/manual/v3/xsd/util/permissionex.html
鉴于您在该领域的知识,您可能已经尝试过这个。消除对权限的需求也会好得多,但两个片段对你来说 - 请注意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>