iis - 如何使用 WiX 将应用程序添加到现有的 IIS 站点

标签 iis web-applications web wix

我想将应用程序添加到现有的 IIS 站点,该站点不是默认的 IIS 站点。这不是通常的请求,但在部署到 Win 2008 SBS 时需要,MVC Web API 应用程序必须移动到“SBS Web 应用程序”下才能正常工作。

在 IIS 中,我将鼠标右键单击“SBS Web 应用程序”>“添加应用程序...”并设置别名、应用程序池和物理路径。

Wix 不允许我在 IIS:WebApplication 上设置这些属性,而且看起来我需要使用 IIS:WebVirtualDir,但我不想或不需要这样做。我只需要将 Physical Path 属性指向我的 API 的安装位置即可。

为什么我不能根据 IIS UI 告诉 WiX IIS:WebApplication 我想要的别名和路径?

在我所做的所有 WiX 工作中,我原以为这会是更容易做的事情之一。

注意:我想创建应用程序,我不想或不需要创建站点 - 它已经存在。

最佳答案

您可以使用 WIX 实现指定的目标。我有更复杂的变体:安装到新网站或现有网站,适用于 IIS 6、IIS 7 和 IIS 7.5。

至于安装到现有网站, WIX 基于 SiteId 识别站点 .如果您的站点具有非自动生成的 ID,则需要明确指定它,而不是在相应字段中设置 *。否则 siteId 是根据它的 Description 属性生成的,因此您需要正确指定 description 以引用现有站点。

下面是我的实现(我希望你能从中提取你需要的东西):

<PropertyRef Id="FRAMEWORKROOT"/>

<PropertyRef Id="SITE_INSTALL_MODE"/>
<PropertyRef Id="SITE_NAME"/>
<PropertyRef Id="SITE_PORT"/>
<PropertyRef Id="SITE_VIRT_DIR"/>
<PropertyRef Id="SITE_APP_NAME"/>
<PropertyRef Id="SITE_HEADER"/>
<PropertyRef Id="SITE_APP_POOL"/>
<PropertyRef Id="SITE_ID"/>

<Property Id="SITE_APP_NAME" Value="{ProductId}"/>

<iis:WebApplication Id="IIS6WebApp" Name="[SITE_APP_NAME]" WebAppPool="AppPool" >
  <iis:WebApplicationExtension Verbs="GET,HEAD,POST" CheckPath="no" Script="yes" Executable="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" />
</iis:WebApplication>

<iis:WebApplication Id="Iis7WebApp" Name="[SITE_APP_NAME]" WebAppPool="AppPool"></iis:WebApplication>

<iis:WebSite Id="ExistingWebSite" Description="[EXISTING_SITE_NAME]" SiteId="*">
  <iis:WebAddress Id="ExistingSite_IIS7_Header_Binding" Port="[SITE_PORT]" Header="[SITE_HEADER]" />
</iis:WebSite>

<util:Group Id="IisUsersGroup" Name="[IisGroup]" Domain="[ComputerName]"/> 

<DirectoryRef Id="SITE_INSTALLDIR">
  <Component Id="AppPoolConfigure" Guid="YOURGUID-5549-48E8-B989-AFC61D279527" KeyPath="yes" Permanent="no">
    <util:User Id="SiteUser" Domain="[APP_USER_DOMAIN]" Name="[APP_USER_NAME]" Password="[APP_USER_PASSWORD]" CreateUser="no" UpdateIfExists="no" RemoveOnUninstall="no">
      <util:GroupRef Id="IisUsersGroup"/>
    </util:User>

    <iis:WebAppPool Id="AppPool" Name="[SITE_APP_POOL]" ManagedRuntimeVersion="v4.0" ManagedPipelineMode="integrated" Identity="other" User="SiteUser" />
  </Component>

  <Component Id="Iis6NewSiteConfigure" Guid="YOURGUID-8592-4E69-8D80-E42745307D7A" KeyPath="yes" Permanent="no">
    <Condition><![CDATA[Installed OR (SITE_INSTALL_MODE = "NewSite" AND IISMAJORVERSION AND (IISMAJORVERSION = "#6"))]]></Condition>
    <iis:WebSite Id="NewWebSite_IIS6" Description="[SITE_NAME]"
                 AutoStart="yes" StartOnInstall="yes" ConfigureIfExists="no"
                 Directory="SITE_INSTALLDIR" ConnectionTimeout="360" SiteId="[SITE_ID]" 
                 DirProperties="WebDirProperties" WebApplication="IIS6WebApp">
      <iis:WebAddress Id="Site_IIS6_Header_Bindings" Port="[SITE_PORT]" Header="[SITE_HEADER]" />
    </iis:WebSite>
  </Component>

  <Component Id="Iis6ExistingSiteConfigure" Guid="YOURGUID-8ECB-4AC3-95B1-B7287D0AC903" KeyPath="yes" Permanent="no">
    <Condition><![CDATA[Installed OR (SITE_INSTALL_MODE = "ExistingSiteNewVDir" AND IISMAJORVERSION AND (IISMAJORVERSION = "#6"))]]></Condition>
      <iis:WebVirtualDir Id="Site_IIS6_VDir" Directory="SITE_INSTALLDIR" Alias="[SITE_VIRT_DIR]" WebSite="ExistingWebSite" 
                         DirProperties="WebDirProperties" WebApplication="IIS6WebApp"/>
  </Component>

  <Component Id="Iis6ConfigExtentions" Guid="YOURGUID-55F2-48E3-8B08-E37BA5137D8D" KeyPath="yes" Permanent="yes">
    <Condition><![CDATA[Installed OR (IISMAJORVERSION AND (IISMAJORVERSION = "#6"))]]></Condition>
    <iis:WebServiceExtension Id="ExtensionASP4" Group="ASP.NET v4.0.30319" Allow="yes" File="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" Description="ASP.NET v4.0.30319"/>
  </Component>

  <Component Id="Iis7NewSiteConfigure" Guid="YOURGUID-5DF6-4071-94F4-89D1EDAE8D90" KeyPath="yes" Permanent="no">
    <Condition><![CDATA[Installed OR (SITE_INSTALL_MODE = "NewSite" AND IISMAJORVERSION AND (IISMAJORVERSION > "#6"))]]></Condition>
    <iis:WebSite Id="WebSite_IIS7" Description="[SITE_NAME]"
                 AutoStart="yes" StartOnInstall="yes" ConfigureIfExists="yes"
                 Directory="SITE_INSTALLDIR" ConnectionTimeout="360" SiteId="[SITE_ID]"
                 DirProperties="WebDirProperties" WebApplication="Iis7WebApp">
      <iis:WebAddress Id="NewSite_IIS7_Header_Binding" Port="[SITE_PORT]" Header="[SITE_HEADER]" />
    </iis:WebSite>
  </Component>

  <Component Id="Iis7ExistingSiteConfigure" Guid="YOURGUID-FBBE-4379-8C7B-CDBD08EDCBA2" KeyPath="yes" Permanent="no">
    <Condition><![CDATA[Installed OR (SITE_INSTALL_MODE = "ExistingSiteNewVDir" AND IISMAJORVERSION AND (IISMAJORVERSION > "#6"))]]></Condition>
      <iis:WebVirtualDir Id="Site_IIS7_VDir" Directory="SITE_INSTALLDIR" Alias="[SITE_VIRT_DIR]" WebSite="ExistingWebSite"
                         DirProperties="WebDirProperties" WebApplication="Iis7WebApp"/>
  </Component>
</DirectoryRef>

<ComponentGroup Id="IisSiteOrVDirCreate">
  <ComponentRef Id="AppPoolConfigure"/>
  <ComponentRef Id="Iis6NewSiteConfigure"/>
  <ComponentRef Id="Iis6ExistingSiteConfigure"/>
  <ComponentRef Id="Iis6ConfigExtentions"/>
  <ComponentRef Id="Iis7NewSiteConfigure"/>
  <ComponentRef Id="Iis7ExistingSiteConfigure"/>
</ComponentGroup>

<CustomAction Id="SetIisGroupToIUSRS" Property="IisGroup" Value="IIS_IUSRS" />
<CustomAction Id="SetIisGroupToWPG" Property="IisGroup" Value="IIS_WPG" />

<CustomAction Id="SetIisSiteUser" Property="IisSiteUser" Value="[APP_USER_DOMAIN]\[APP_USER_NAME]"/>

<InstallExecuteSequence>
  <Custom Action="SetIisGroupToIUSRS" After="AppSearch">IISMAJORVERSION>="#7"</Custom>
  <Custom Action="SetIisGroupToWPG" After="AppSearch">IISMAJORVERSION="#6"</Custom>
  <Custom Action="SetIisSiteUser" Before="InstallInitialize">1</Custom>
</InstallExecuteSequence> 

关于iis - 如何使用 WiX 将应用程序添加到现有的 IIS 站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719080/

相关文章:

html - HTML 中的多个 100% 高度 block

c# - CSV 下载为 HTM

visual-studio-2008 - 我无法再使用 visual studio 2008 调试经典的 asp 代码

java - 在 IIS 服务器上运行的 Angular FE:对 http://localhost:8080/api 的 POST 请求生成 net::ERR_CONNECTION_REFUSED

java - 以 pdf 形式发送字节

java - 建议 : Java server implementation for web application

asp.net - 在 vb.net 中获取当前 URL

iis - "Fixed number of requests"后应用程序池回收

c# - IIS 8 上的内部服务器错误 500

python - 如何在 GAE 上使用 webapp 服务静态网页