有条不紊地安装功能在Wix中不起作用

时间:2010-06-16 02:58:41

标签: 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='*' 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系统上会出错。

我也尝试将条件放在组件中,但也没有用。

我的用法有问题吗?

3 个答案:

答案 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是否会覆盖此行为......

无论如何,如果你的方式有效......