Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iis 有条件安装功能在Wix中不工作_Iis_Wix_Conditional Statements - Fatal编程技术网

Iis 有条件安装功能在Wix中不工作

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='*'

我有一个需要在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>

'#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中的自定义操作