我使用以下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应用程序属性中看到)。
该应用程序甚至可以工作!
如果找不到应用程序池,如何使安装失败?
答案 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;
}