由于我无法在组件中的元素上添加条件,因此我必须将条件分成两个独立的组件条件。从每个例子来看,这是如何做到的:
<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 Installer会在创建目录之前检查每个用户是否存在(忽略条件)。有没有办法跳过这个检查?我已经知道其中一个用户不存在。
答案 0 :(得分:5)
找到解决方案:设置属性的条件自定义操作。
<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 for ya。