如果WebAppPool不存在,如何安装失败?

时间:2012-09-21 14:47:49

标签: iis wix application-pool

我使用以下Wix代码在IIS中创建WebApplication并将其分配给特定的应用程序池。

<iis:WebAppPool Id="AppPool_Wcf" Name="$(var.WCF_APP_POOL)" />

<iis:WebSite Id="Web_site" Description="$(var.WEB_SITE_DESCRIPTION)" SiteId="[SITEID]">
    <iis:WebAddress Id="Web_Address" Port="*"/>
</iis:WebSite>

<DirectoryRef Id="TARGETDIR">
    <Directory Id="SITEPATH">
        <Directory Id="WCF_VIRT_DIR" Name="$(var.WCF_VIRT_DIR)">
            <Component Id="IIS_Wcf" Guid="$(var.deploy.wcf.guid)" KeyPath="yes">
                <iis:WebVirtualDir Id="Wcf_VirtualDir" Alias="$(var.WCF_VIRT_DIR)" WebSite="Web_site" Directory="WCF_VIRT_DIR">
                    <iis:WebApplication Id="Wcf_Application" Name="$(var.WCF_VIRT_DIR)" WebAppPool="AppPool_Wcf" />
                </iis:WebVirtualDir>
            </Component>
        </Directory>
    </Directory>
</DirectoryRef>

应用程序池应该已经存在,因为它与其他一些应用程序共享。

如果它不存在,则安装成功,将Web应用程序分配给神秘的<Invalid Application Pool>(可在Web应用程序属性中看到)。 该应用程序甚至可以工作!

如果找不到应用程序池,如何使安装失败?

1 个答案:

答案 0 :(得分:0)

您必须为此立即创建自定义操作。例如,在C#/ DTF中,它可以像这样实现:

[CustomAction]
public static ActionResult FailIfAppPoolNotExist(Session session)
{
  DirectoryEntry appPool = new DirectoryEntry(string.Format("IIS://localhost/w3svc/AppPools/{0}", session["APP_POOL_NAME"]));

  if (appPool == null)
  {
    return ActionResult.Failure;
  }
  return ActionResult.Success;
}