如何在 Wix 中指定 PermissionEx 的条件?

How can I specify a condition on a PermissionEx in wix?

我想有条件地将 ACE 添加到目录。 WiX documentation 和 XSD 声明它是 util:PermissionEx 的有效子项,但我无法让它工作。真的支持吗?

我有这个安装程序定义:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
  xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*" Name="test" Language="1033" Version="0.0.1" Manufacturer="Microsoft Corporation" UpgradeCode="89028746-7cf3-42e7-8121-d0bf0140e2dd">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64" />

    <MediaTemplate EmbedCab="yes" />

    <Feature Id="ProductFeature" Title="test" Level="1">
      <ComponentRef Id="Component_TokenFolder_HybridAgent" />
    </Feature>

    <Property Id="ISDOMAINCONTROLLER" Value="0"/>
    <Property Id="SERVICEUSERGROUP" Value="foo"/>
    <InstallExecuteSequence>      
      
    </InstallExecuteSequence>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="CommonAppDataFolder">
        <Directory Id="AppDataFolder_HybridAgent" Name="FOO">
          <Directory Id="TokenFolder_HybridAgent" Name="Tokens">
            <Component Id="Component_TokenFolder_HybridAgent" Guid="b733054f-b0df-40fe-942a-a492fa8109a3">
              <CreateFolder>
                <util:PermissionEx GenericAll="yes" User="NT AUTHORITY\SYSTEM"/>
                <util:PermissionEx GenericAll="yes" User="Administrators"/>
                <util:PermissionEx Read="yes" ReadAttributes="yes" ReadExtendedAttributes="yes" ReadPermission="yes" GenericRead="yes" User="[SERVICEUSERGROUP]">
                  <Condition>ISDOMAINCONTROLLER=0</Condition>
                </util:PermissionEx>
              </CreateFolder>
            </Component>
          </Directory>
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

  </Wix>

当我尝试在 WiX 3.11 中使用 candle.exe 编译它时,我得到:

C:\onebranch\HybridAgent\src\deploy\Deployment\Deployment\test.wxs(30) : error CNDL0203 : The util:PermissionEx element contains an unsupported extension element 'Condition'.  The util:PermissionEx element does not currently support extension elements. Is the Condition element using the correct XML namespace?

PermissionEx 是一个有点棘手的元素。有一个来自 WixUtilExtension(您从 util: 命名空间获得的那个),一个内置于 Windows 安装程序(您从默认的 wix 命名空间获得的那个) .

为什么有两个?好吧,我们添加了 util:PermissionEx 可以做普通 Permission 元素做不到的事情。然后在 Windows Installer 5.0 中他们添加了 PermissionEx 创建碰撞。

所以你想确保你在正确的 link:

  1. util:PermissionEx
  2. PermissionEx

要回答您的问题,您可以通过调节 Component 来调节 util:PermissionEx。如果您可以采用 Windows Installer 5.0(在 Win7+ 中可用),那么您可以使用 PermissionEx 及其更多 fine-grained 条件支持。