我有一个我需要在IIS6和IIS7上支持的设置。现在我使用IIS6的内置IIS扩展,如下所示:
<Component Id="C_IISApplication" Guid="{9099909C-B770-4df2-BE08-E069A718B938}" >
<iis:WebSite Id='TSIWSWebSite' Description='TSWeb' SiteId='*' Directory='INSTALLDIR'>
<iis:WebAddress Id='tcpAddress' Port='8081' />
</iis:WebSite>
<iis:WebAppPool Id="BlahWSApplicationPool" Name="Blah" />
<iis:WebVirtualDir Id="VirtualDir"
Alias="Blah"
Directory="INSTALLDIR"
WebSite="BlahWSWebSite"
DirProperties="WebVirtualDirProperties">
<iis:WebApplication Id="WebApplication"
Name="Blah"
WebAppPool="BlahWSApplicationPool"/>
</iis:WebVirtualDir>
</Component>
我在这样的功能中尝试了一个条件:
<Feature Title="IIS6" Id="IIS6" Description="IIS6" ConfigurableDirectory="INSTALLDIR" Level="1" Absent="disallow" Display="hidden">
<ComponentRef Id="C_IISApplication" />
<Condition Level="0"><![CDATA[IISVERSION <> '#6']]></Condition>
</Feature>
无论我的条件有什么价值,元数据库的内容都会被执行,我在IIS7系统上会出错。
我也尝试将条件放在组件中,但也没有用。
我的用法有问题吗?
答案 0 :(得分:1)
我的问题是IISVERSION属性集的位置。我不在WIX中使用IIS模式,但其他扩展的内置属性是用它们的模式记录的,我在IIS模式的文档中没有看到IISVERSION。我在这里找到了这个引用WiX tricks and tips来在注册表中搜索IIS的版本号(如果按投票计数排序,它是第二个提示/提示)。
如果您已经使用该方法填充该属性,那么我会查看该检查,您确定WiX会从注册表中返回“#6”的版本号吗?编辑:主要版本是DWORD SO #6是正确的。
编辑: 重新阅读问题和“样本”我还将功能级别设置为0和条件,以便在IISVERION = 6时激活该功能。更容易将其视为肯定的否定。
但所有这些都是IISVERSION正在设置
答案 1 :(得分:0)
据我所知,标准WiX扩展(如IIsExtension)的自定义操作与要执行的组件条件相关联。
此外,还不清楚IISVERSION属性的来源,但IIsExtension会公开并正确设置自己的属性IISMAJORVERSION和IISMINORVERSION。因此,在您的情况下,IISMAJORVERSION将参与组件条件。
我的解决方案中有类似的代码:
<Fragment>
<PropertyRef Id="IISMAJORVERSION"/>
<PropertyRef Id="IISMINORVERSION"/>
...
<!-- This component is to be installed on IIS 6. It creates a new site with the name provided by user -->
<Component DiskId="1" Id="CreateIISSite6" Guid="{GUID}" Directory="WebsiteFolder">
<Condition>IISMAJORVERSION = "#6" AND CREATE_IIS_SITE</Condition>
<CreateFolder/>
<iis:WebSite Id="NewIISSite6" SiteId="[IISSITE_ID]" Description="[IISSITE_NAME]" AutoStart="yes" Directory="WebsiteFolder" WebApplication="IISSiteApplication6" DirProperties="IISRootWebDirProperties">
<iis:WebAddress Id="NewIISSiteAddress6" Header="[IISSITE_HEADER]" Port="[IISSITE_PORT]" />
</iis:WebSite>
</Component>
...
</Fragment>
希望这有帮助。
答案 2 :(得分:0)
您是否尝试删除Absent=disallow
属性?文档说这将强制安装该功能,无论可见性如何。我知道如果完全禁用该功能,将级别设置为0,但我想知道Absent=disallow
是否会覆盖此行为......
无论如何,如果你的方式有效......