Iis 有条件安装功能在Wix中不工作
我有一个需要在IIS6和IIS7上支持的设置。目前,我正在使用IIS6的内置IIS扩展,如下所示:Iis 有条件安装功能在Wix中不工作,iis,wix,conditional-statements,Iis,Wix,Conditional Statements,我有一个需要在IIS6和IIS7上支持的设置。目前,我正在使用IIS6的内置IIS扩展,如下所示: <Component Id="C_IISApplication" Guid="{9099909C-B770-4df2-BE08-E069A718B938}" > <iis:WebSite Id='TSIWSWebSite' Description='TSWeb' SiteId='*'
<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>
'#6']]>
不管我的条件值是多少,元数据库的东西都会被执行,我在IIS7系统上会得到一个错误
我也试着把条件放在组件中,但也不起作用
我的用法有问题吗?我的问题是IISVERSION属性集在哪里。我在WIX中没有使用IIS模式,但是其他扩展的内置属性都是用它们的模式记录的,我在IIS模式的文档中没有看到IISVERSION。我在这里找到此引用是为了在注册表中搜索IIS的版本号(如果按票数排序,则是第二个提示/提示) 如果您已经在使用该方法填充属性,那么我将查看检查,您确定WiX会从注册表返回“#6”作为版本号吗?编辑:主版本是DWORD,因此#6是正确的 编辑: 重新阅读问题和“示例”,我还将功能级别设置为0,并将条件设置为如果IISVERION=6,它将激活该功能。它更容易理解为一个积极的消极
但我要说的是IISVERSION被设置了我的问题是IISVERSION属性集在哪里。我在WIX中没有使用IIS模式,但是其他扩展的内置属性都是用它们的模式记录的,我在IIS模式的文档中没有看到IISVERSION。我在这里找到此引用是为了在注册表中搜索IIS的版本号(如果按票数排序,则是第二个提示/提示) 如果您已经在使用该方法填充属性,那么我将查看检查,您确定WiX会从注册表返回“#6”作为版本号吗?编辑:主版本是DWORD,因此#6是正确的 编辑: 重新阅读问题和“示例”,我还将功能级别设置为0,并将条件设置为如果IISVERION=6,它将激活该功能。它更容易理解为一个积极的消极
但我所说的只是设置IIS版本据我所知,来自标准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>
...
IISMAJORVERSION=“#6”并创建_IIS_站点
...
希望这能有所帮助。据我所知,来自标准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>
...
IISMAJORVERSION=“#6”并创建_IIS_站点
...
希望这有帮助。您是否尝试删除
缺席=disallow
属性?文档称,这将强制安装该功能,而不管其可见性如何。我知道将级别设置为0应该会完全禁用该功能,但我想知道缺席=不允许
是否会覆盖此行为
无论如何,如果您的方式有效…您是否尝试删除
缺席=disallow
属性?文档称,这将强制安装该功能,而不管其可见性如何。我知道将级别设置为0应该会完全禁用该功能,但我想知道缺席=不允许
是否会覆盖此行为
无论如何,如果您的方式有效…是的,我在检索值后通过创建一条条件消息检查IISVERSION是否正在设置,它确实返回#6或#7。我也同意设置Level=1和condition=#6,因为它更容易阅读……这实际上是我最初的想法,但我一直在尝试不同的组合,试图让条件不安装该功能。我做了更多的测试,并从该功能中删除了Display=“hidden”属性。我现在可以看到该功能在IIS7机器上的功能对话框中不可见,在IIS6机器上可见。所以我不明白为什么它要做元数据库事务,如果组件没有安装,就找不到IIS机器。我认为如果没有安装相应的组件,IIS架构中的自定义操作都会被跳过。是的,我在检索值后通过创建条件消息检查IISVERSION是否正在设置,它确实返回了#6或#7。我也同意设置Level=1和condition=#6,因为它更容易阅读……这实际上是我最初的想法,但我一直在尝试不同的组合,试图让条件不安装该功能。我做了更多的测试,并从该功能中删除了Display=“hidden”属性。我现在可以看到该功能在IIS7机器上的功能对话框中不可见,在IIS6机器上可见。所以我不明白为什么它要做元数据库事务,如果组件没有安装,就找不到IIS机器。我会想到IIS sche中的自定义操作