1

我使用以下 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 应用程序属性中看到)。该应用程序甚至可以工作!

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

4

1 回答 1

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;
}
于 2013-07-04T13:00:06.223 回答