【问题标题】:How to fail installation if WebAppPool doesn't exist?如果 WebAppPool 不存在,如何安装失败?
【发布时间】:2012-09-21 14:47:48
【问题描述】:

我使用以下 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 应用程序分配给一个神秘的&lt;Invalid Application Pool&gt;(可以在 Web 应用程序属性中看到)。 该应用程序甚至可以正常工作!

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

【问题讨论】:

    标签: iis wix application-pool


    【解决方案1】:

    您必须为此创建一个即时自定义操作。例如,在 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2019-03-14
      • 2013-04-01
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多