Wix 3.5 和 IIS7 - WriteIIS7ConfigChanges 失败 - 在尝试将三个 Web 应用程序作为虚拟目录安装到默认网站时

Posted

技术标签:

【中文标题】Wix 3.5 和 IIS7 - WriteIIS7ConfigChanges 失败 - 在尝试将三个 Web 应用程序作为虚拟目录安装到默认网站时【英文标题】:Wix 3.5 & IIS7 - WriteIIS7ConfigChanges Failed - Whilst attempting to install three web applications as virtual directories to default website 【发布时间】:2011-07-27 16:42:22 【问题描述】:

我希望有人可以帮助我解决我在 Windows Server 2008 上使用 Wix 3.5.2519.0 时遇到的问题,并使用 IIS7 & IIS6 兼容性 已安装功能。

MSI 日志文件

我们在尝试在默认网站下定义三个虚拟 Web 应用程序目录时遇到以下错误,如使用 msiexec.exe/log <filename> 选项记录的那样:

Action 17:05:57: StartIIS7ConfigTransaction. Starting IIS Config Transaction
Action 17:05:57: RollbackIIS7ConfigTransaction. Rolling back IIS Config Transaction
Action 17:05:57: CommitIIS7ConfigTransaction. Committing IIS Config Transaction
Action 17:05:57: ConfigureIIs7Exec. Configuring IIS
ConfigureIIs7Exec:  Error 0x800700b7: Failed get sites section
ConfigureIIs7Exec:  Error 0x800700b7: Failed to search for Website
ConfigureIIs7Exec:  Error 0x800700b7: Failed get sites section
ConfigureIIs7Exec:  Error 0x800700b7: Failed to search for Website
ConfigureIIs7Exec:  Error 0x800700b7: Failed get sites section
ConfigureIIs7Exec:  Error 0x800700b7: Failed to search for Website
Action 17:05:57: WriteIIS7ConfigChanges. Installing Config Keys and Values
WriteIIS7ConfigChanges:  Error 0x800700b7: Failed get sites section
WriteIIS7ConfigChanges:  Error 0x800700b7: Failed to read sites from config
WriteIIS7ConfigChanges:  Error 0x800700b7: Failed to configure IIS application.
WriteIIS7ConfigChanges:  Error 0x800700b7: WriteIIS7ConfigChanges Failed.
Action ended 17:05:57: InstallFinalize. Return value 3.
Action 17:05:57: Rollback. Rolling back action:
Rollback: Installing Config Keys and Values
Rollback: Configuring IIS
Rollback: Committing IIS Config Transaction
Rollback: Rolling back IIS Config Transaction

Wix 组件声明

需要安装三个网站,它们都在wxs 文件中使用组件 xml 语法声明如下(它们不完全相同,但非常接近):

<Component Id="DataServiceVirtualDir" Guid="9AC00BDC-D710-429f-B68B-8130DB17C90C">
  <CreateFolder/>
  <iis:WebVirtualDir Id="OurApplicationDataService" 
                     Alias="OurApplicationDataService" 
                     Directory="DATASERVICEDIR" 
                     WebSite="OurApplicationDataService" 
                     DirProperties="OurApplicationDirProperties">
    <iis:WebApplication Id="OurApplicationDataService" Name="OurApplicationDataService">
    </iis:WebApplication>
  </iis:WebVirtualDir>
</Component>

网站声明

同样,它们使用以下 website 元素和支持元素声明:

<iis:WebSite Id="OurApplicationDataService" Directory="DATASERVICEDIR" 
             Description="OurApplication Data Service">
  <iis:WebAddress Id="AllUnassignedData" IP="*" Port="80"/>
</iis:WebSite>

<iis:WebSite Id="OurApplicationSecurityService" Directory="SECURITYSERVICEDIR" 
             Description="OurApplication Security Service">
  <iis:WebAddress Id="AllUnassignedSecurity" IP="*" Port="80"/>
</iis:WebSite>

<iis:WebSite Id="OurApplicationProcessingFacades" Directory="PROCESSINGFACADESDIR" 
             Description="OurApplication Processing Facades">
  <iis:WebAddress Id="AllUnassignedFacades" IP="*" Port="80"/>
</iis:WebSite>

<iis:WebDirProperties Id="OurApplicationDirProperties" WindowsAuthentication="no" 
                      AnonymousAccess="yes" AnonymousUser="OurApplicationUserID" />

<iis:WebDirProperties Id="SecurityDirProperties" 
                      WindowsAuthentication="yes" AnonymousAccess="no" />

到目前为止的总结和结论

所以这个神秘的安装程序错误,0x800700b7,似乎把它搞砸了。

有趣的是,安装程序的早期版本安装良好,并且之前多次卸载良好。但是,现在尝试卸载以前的安装程序并安装新的安装程序时,卸载失败并出现完全相同的错误,卸载日志文件的失败部分与上面的日志部分几乎相同。

如果我将 Web 应用程序二进制文件复制到所需的安装目录并通过 IIS7 管理控制台手动连接一个虚拟目录,一切正常,并且网站会适当地响应请求。

据我所知,IIS7 网站和目标安装目录都是空的、空白的,并且在准备安装时进行了其他清理。

Google 上没有太多关于这个的,我想我可能只需要在盒子上重新安装 IIS7 看看它是否可以解决问题,但可以说这是核选项。

有人有什么想法吗?

提前致谢。

【问题讨论】:

您是否尝试使用管理员帐户安装它? 是的,我们做到了,事实上我们尝试了具有不同权限的多个帐户。没有任何区别。 我在使用 WiX 3.5 和 IIsExtension 时遇到过类似的问题。试试 WiX 3.6 - 很有可能它已经修复了。 谢谢严。不幸的是,我们最终的解决方案是重建整个服务器。这让问题消失了——服务器从头到尾有点笨拙(它还需要一个genreatePublisherEvidence 修复来进行证书验证)。自从重建以来,所有这些问题都幸运地消失了。 【参考方案1】:

这可能有点晚,因为您已经重建了服务器,但我得到了完全相同的错误。

错误的最终原因是 apppool 为我的应用程序使用了错误的 .NET 版本。我通过将应用程序分配给它自己的应用程序池而不是使用服务器上的默认应用程序池来解决它。您可能将服务器上的默认应用程序池设置为您的应用程序所需的版本,这就是它最终工作的原因。

<Directory Id='WebAppFiles' Name='WebApp'>
<!-- The component to define the Virtual Directory.-->
<Component Id="WebVirtualDirApp"
    Guid="your-guide-goes-here">
    <!-- The virtual directory we are installing. -->
    <!-- The Alias attribute is the name thata will be put into IIS.-->
    <!-- The Directory attribute is the "Physical Path" property in
         IIS and needs to tie to an ID specified in the setup. -->
    <!-- The WebSite attribute ties to a <WebSite> element in the 
         setup file. As this is an example of installing into the 
         "Default Web Site" that element is not under a component.-->
    <iis:WebAppPool Id="YourWebAppPoolId" Name="YourWebAppPool" 
             ManagedRuntimeVersion="v2.0" />
    <iis:WebVirtualDir Id="VDirApp" Alias="[VDIRNAME]" 
             Directory="WebAppFiles" WebSite="DefaultWebSite">
        <!-- Turn the Virtual Directory into a web application. -->
        <iis:WebApplication Id="TheWebApplication"  
            WebAppPool="YourWebAppPoolId"
            Name="[VDIRNAME]" />
    </iis:WebVirtualDir>
    <!-- This is pretty important. If the CreateFolder isn't there the
         WebVirtualDir won't get created as there's no files in this
         component.
         http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg03483.html -->
    <CreateFolder/>                 
</Component>
</Directory>

【讨论】:

感谢您的回答,您是正确的,我无法确定这是否是问题的原因。我在 WiX 项目中没有应用程序池定义,但定义一个很可能是解决方案。 我的配置实际上是这样设置的,但仍然遇到了问题(如果您好奇我的解决方案是什么,请参阅我的回答。)无论哪种方式,+1,因为它仍然非常有用...【参考方案2】:

我最近一直在努力解决类似的错误;主要区别在于我们在“WriteIIS7ConfigChanges”错误中也提到了应用程序池。大量在线搜索(我是如何看到这篇文章的)表明您的问题可能是由于 Wix 已修复的各种错误造成的。我们使用的是 Wix 3.7.1119.0,但是,截至撰写本文时,它是最新的 RC,因此至少还有一种其他方法可以解决此错误。

我最终发现是一些不相关的权限问题导致我们的安装失败,然后回滚也在其中一个步骤上静默失败,弄乱了服务器配置。我们正在插入

<system.transactions><machineSettings maxTimeout="00:30:00"/><defaultSettings timeout="00:30:00"/></system.transactions>

进入 C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config,但本应删除它的回滚步骤出错并显示“访问被拒绝”消息。初始尝试失败后的任何安装尝试都会导致 ConfigureIIS7Exec 错误。进入并从 machine.config 中手动删除事务超时设置导致“无法搜索网站”错误消失,我们的安装再次成功完成。

【讨论】:

【参考方案3】:

我也遇到过这个。我在安装日志中看到以下消息:

MSI (s) (B8:74) [11:11:24:699]: Invoking remote custom action. DLL: C:\Windows\Installer\MSICF14.tmp, Entrypoint: WriteIIS7ConfigChanges
WriteIIS7ConfigChanges:  Error 0x80070002: Failed get AnonymousAuthentication section for DirProp
WriteIIS7ConfigChanges:  Error 0x80070002: Failed set Authentication for DirProps
WriteIIS7ConfigChanges:  Error 0x80070002: Failed to configure IIS DirProperties.
WriteIIS7ConfigChanges:  Error 0x80070002: WriteIIS7ConfigChanges Failed.

我打开了 IIS 管理器,当我点击我试图安装到的站点时,我收到了一个关于 / 指向无效目录的错误。

我点击了站点 -> 转到右侧窗格,右键单击有问题的站点,“应用程序池”和“物理路径”都是空白的。一旦我设置了这些并应用了更改,我就可以继续前进。不知道我的默认网站配置是如何被破坏的,但是在 IIS 管理器下修复它解决了这个问题。

【讨论】:

以上是关于Wix 3.5 和 IIS7 - WriteIIS7ConfigChanges 失败 - 在尝试将三个 Web 应用程序作为虚拟目录安装到默认网站时的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WiX Burn 在 Windows 8 和 Windows Server 2012 上安装 .NET Framework 3.5?

改变 WIX 生成的 .NET 3.5 引导程序的行为

WiX 在具有 .NET 3.5 的机器上安装 .NET 4.5,但不在具有 .NET 4.0 的机器上

我需要更改啥以允许我的 IIS7 ASP.Net 3.5 应用程序创建事件源并将事件记录到 Windows EventLog?

WCF 与 3.5 和 4.0 一起使用

WCF 3.5 服务和多个 http 绑定