如何使用Wix安装全局ISAPI过滤器?(适用于IIS 7.5)

3

我正在努力使用wix 3.6.3303.1/4.0.12.0将基于com的isapi dll全局安装到iis 7.5中。

我有以下wix配置(完整配置在此处):

<Fragment>
  <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
    <Component Id="IsapiDll" Guid="ADD-GUID-HERE">
      <File Id="isapidll" Name="isapi.dll" Source="isapi.dll" />
    </Component>
    <Component Id="IisFilter" Guid="ADD-GUID-HERE">
      <CreateFolder />
      <iis:WebFilter Id="IisFilter" Name="MyIsapi" Path="[INSTALLFOLDER]isapi.dll" LoadOrder="last" Description="MyIsapi" />
    </Component>
  </ComponentGroup>
</Fragment>

在 Windows 7 32 位操作系统上运行 IIS7.5 时,我的 MSI 日志中出现了以下错误:
WriteIIS7ConfigChanges:  Error 0x8007000e: Failed while finding IAppHostElement filter/@name=(null)
WriteIIS7ConfigChanges:  Error 0x8007000e: Failed to delete filter
WriteIIS7ConfigChanges:  Error 0x8000ffff: Unexpected IIS Config action specified for global filter
WriteIIS7ConfigChanges:  Error 0x8000ffff: Failed to configure IIS filter global.
WriteIIS7ConfigChanges:  Error 0x8000ffff: WriteIIS7ConfigChanges Failed.

我担心的问题是wix本身的一个bug。 在CreateGlobalFilter()将pwzFilterName传递给DeleteCollectionElement()之前,它没有被赋值。这后来导致调用带有空值wzAttributeValue的Iis7FindAppHostElementString(),这似乎是错误的原因。

当然,我可能会追着一个错误的方向跑,如果能指点一下正确的方向就太好了...

更新: 我已经尝试了网站级别的安装,增加了WebSite属性和element,现在可以正常工作了,Config here

编辑:更改路径属性为正确格式。

2个回答

2

0x8007000e 表示内存不足,而消息中的 (null) 让我相信这是自定义操作中的一个错误。如果您可以调试它,那就太理想了。无论如何,在http://wixtoolset.org/bugs 上报一个 bug 可能是一个好主意。


谢谢Rob,我会提交一个bug并在有机会时进行调试。 - Richard Oliver

0

你忘记添加WebSite属性了,在WIX3.7中这段代码对我来说运行良好:

<Component Id="IsapiFilterComponent" Guid="AE102719-D7DE-450A-A44C-29E7D9A36C0D" KeyPath="yes">
  <iis:WebFilter Id="MyWebDavFilter" Name="MyWebDavFilter" Path="[INSTALLFOLDER]MyWebDavFilter.dll" LoadOrder="last" Description="My Web Dav Filter" WebSite="DefaultWebSite" />
</Component>

但这个

<Component Id="IsapiFilterComponent" Guid="AE102719-D7DE-450A-A44C-29E7D9A36C0D" KeyPath="yes">
  <iis:WebFilter Id="MyWebDavFilter" Name="MyWebDavFilter" Path="INSTALLFOLDER]MyWebDavFilter.dll" LoadOrder="last" Description="My Web Dav Filter"/>
</Component>

给出了与你相同的错误。

当然,你必须在你的wxs文件中添加<iis:WebSite>元素。


嗨,这将安装一个特定于网站的ISAPI过滤器,对我也有效。不幸的是,我需要一个全局过滤器。 - Richard Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接