如何使用Wix在IIS 7上安装ASP.Net MVC应用程序?

Sim*_*ele 15 iis asp.net-mvc iis-7 wix

对于IIS6,我可以使用Wix中的IIS帮助程序来安装这样的Web应用程序:

<iis:WebAppPool 
    Id="AP_MyApp" 
    Name="My Application Pool" 
    Identity="networkService" />
<iis:WebApplication 
    Id="WA_MyApp" 
    Name="MyApp" 
    WebAppPool="AP_MyApp">
    <iis:WebApplicationExtension
        CheckPath="no"
        Executable="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll"
        Verbs="GET,HEAD,POST"/>
</iis:WebApplication>
Run Code Online (Sandbox Code Playgroud)

不幸的是,这对IIS7不起作用.我们不想使用aspnet_isapi.dll机制,而是希望集成管道处理请求路由.此脚本创建的应用程序池处于经典模式而非集成模式,因此没有任何处理程序可以正常运行.

如何在IIS 7上正确安装MVC应用程序?

Jas*_*rch 11

我个人建议使用AppCmd.exe(matthewthurlow的第一个项目符号),因为您不必依赖正在安装的旧管理组件,也不必冒险手动修改配置XML.

如果您对AppCmd不满意,Mike Volodarsky有一篇关于AppCmd.exe入门的精彩文章,并且Microsoft IIS配置参考非常好,提供用于修改每个配置项的UI,代码和AppCmd示例(例如应用程序池) .在IIS7管理包还包括一个配置编辑器,允许你生成APPCMD脚本从任何现有配置.

要将AppCmd集成到WiX中,您需要为每个命令创建和安排两个自定义操作.WiX v3手册中有一般信息记录了这个程序,我在下面列举了一个具体的例子.

首先,您需要设置立即操作以将命令行存储在属性中:

<CustomAction 
  Id="CreateAppPool_Cmd" 
  Property="CreateAppPool" 
  Execute="immediate" 
  Value="&quot;[WindowsFolder]system32\inetsrv\APPCMD.EXE&quot; add apppool /name:&quot;[APP_POOL_NAME]&quot;" /> 
Run Code Online (Sandbox Code Playgroud)

接下来,设置引用此属性的延迟操作:

<CustomAction 
  Id="CreateAppPool" 
  BinaryKey="WixCA" 
  DllEntry="CAQuietExec" 
  Execute="deferred" 
  Return="ignore" 
  Impersonate="no"/> 
Run Code Online (Sandbox Code Playgroud)

最后,您需要安排这些.设置属性的立即操作似乎在InstallFinalize之后运行良好,并且延迟操作在InstallFiles之后有效.我还没有找到回滚动作.

MapGuide Open Source广泛使用这种方法; 您可以在我们的MapGuide.wxs文件中看到CA计划,在IIS7.wxs文件中看到CA定义.


小智 2

WIX 的 IIS 扩展不支持 IIS7。IIS 团队不断重写版本之间的元数据库。有很多东西不起作用,其中缺乏集成的应用程序池。

在扩展被重写之前,您只剩下三个选择:

  • 使用自定义操作中的构建来调用 appcmd.exe
  • 使用 XmlConfig 更新 applicationHost.config
  • 编写您自己的自定义操作

我目前选择了 xmlconfig 选项,因为您可以在组件中执行此操作并将其与功能绑定。

  • IIS7.5还这样吗? (2认同)