2010-02-26 63 views
3

由于我无法对组件中的元素施加条件,因此必须将条目分成两个单独的条件组件。从每一个例子,这是如何做到这一点:有条件组件

<Component Id="IIS7Webhost" Guid="482EC8D7-2DA2-48e6-A11D-6CAB3C5973E8"> 
    <Condition><![CDATA[IIS_MAJOR_VERSION >= "#7"]]></Condition> 
    <CreateFolder> 
    <Permission User="IUSR" GenericAll="yes"/> 
    </CreateFolder> 
</Component> 
<Component Id="IIS6Webhost" Guid="51C65FAC-84B7-43d1-A230-DD9AE66B5D99"> 
    <Condition><![CDATA[IIS_MAJOR_VERSION <= "#6"]]></Condition> 
    <CreateFolder> 
    <Permission User="IUSR_[ComputerName]" GenericAll="yes"/> 
    </CreateFolder> 
</Component> 

但是这两个部件的各个系统上安装和失败,因为只有这些用户的一个存在。我在这里做错了什么?

IIS_MAJOR_VERSION已正确设置为#6#7。此外,我相信我有语法正确的,因为启动条件正常工作:

<Condition Message="Internet Information Services 5, 6, or 7 must be installed."> 
    <![CDATA[Installed OR (IIS_MAJOR_VERSION >= "#5" AND IIS_MAJOR_VERSION <= "#7")]]> 
</Condition> 

编辑:看起来既不要安装,但Windows安装程序会检查每个用户的存在(而忽略了条件)才去创建目录。有没有办法跳过这个检查?我已经知道其中一个用户将不存在。

回答

4

找到的解决方案:设置属性的条件自定义操作。

<CustomAction Id="SetWebuserIIS7" Return="check" Property="WEBUSER" Value="IUSR" /> 
<CustomAction Id="SetWebuserIIS6" Return="check" Property="WEBUSER" Value="IUSR_[ComputerName]" /> 
<CustomAction Id="SetDomainIIS7" Return="check" Property="WEBDOMAIN" Value="" /> 
<CustomAction Id="SetDomainIIS6" Return="check" Property="WEBDOMAIN" Value="[ComputerName]" /> 

<InstallExecuteSequence> 
    <Custom Action="SetWebuserIIS6" After="InstallInitialize"><![CDATA[IIS_MAJOR_VERSION <= "#6"]]></Custom> 
    <Custom Action="SetWebuserIIS7" After="SetWebuserIIS6"><![CDATA[IIS_MAJOR_VERSION >= "#7"]]></Custom> 
    <Custom Action="SetDomainIIS7" After="SetWebuserIIS7"><![CDATA[IIS_MAJOR_VERSION >= "#7"]]></Custom> 
    <Custom Action="SetDomainIIS6" After="SetDomainIIS7"><![CDATA[IIS_MAJOR_VERSION <= "#6"]]></Custom> 
</InstallExecuteSequence> 

<!-- in component --> 
<CreateFolder> 
    <Permission User="[WEBUSER]" Domain="[WEBDOMAIN]" GenericRead="yes" GenericExecute="yes"/> 
</CreateFolder> 

贷:Source。那就是你的WiX。

+0

令人敬畏的+1。感谢您的发现 - 这为我解决了一个重大问题。 – 2011-01-26 11:22:51