2012-09-21 12 views
1

我使用以下Wix代碼在IIS中創建WebApplication並將其分配給特定的應用程序池。如果WebAppPool不存在,如何失敗安裝?

<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應用程序屬性中看到)。 該應用程序甚至可以工作!

如果未找到應用程序池,我該如何使安裝失敗?

回答

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; 
}