Asp.net mvc 如何使用Wix在IIS 7上安装ASP.Net MVC应用程序?
对于IIS6,我可以使用Wix中的IIS帮助程序安装如下web应用程序:Asp.net mvc 如何使用Wix在IIS 7上安装ASP.Net MVC应用程序?,asp.net-mvc,iis,iis-7,wix,Asp.net Mvc,Iis,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: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>
不幸的是,这对IIS7不起作用。我们不希望使用aspnet_isapi.dll机制,而是希望使用集成管道来处理请求路由。此脚本创建的应用程序池处于经典模式而非集成模式,因此所有处理程序都无法正确运行
如何在IIS 7上正确安装MVC应用程序?WIX的IIS扩展不支持IIS7。IIS团队在版本之间不断重写元数据库。有相当多的事情不起作用,其中缺乏一个集成的应用程序池 在重写扩展之前,您只有三个选项:
- 使用内置自定义操作调用appcmd.exe
- 使用XmlConfig更新applicationHost.config
- 编写自己的自定义操作
目前我选择了xmlconfig选项,因为您可以在组件中执行此操作,并将其与功能绑定。多亏了@matthewturlow,我才能够使用XML UTIL实现我需要做的事情:
<util:XmlFile
Id="ModifyAppPoolPipelineType"
Action="setValue"
ElementPath="//configuration/system.applicationHost/applicationPools/add[\[]@name='My Application Pool'[\]]/@managedPipelineMode"
File="[WindowsFolder]System32\inetsrv\config\applicationHost.config"
Value="Integrated"/>
其余的操作似乎与IIS 7配合得很好。我个人建议使用AppCmd.exe(Matthewturlow的第一个项目符号),因为您不必依赖正在安装的旧版管理组件,也不必冒手动修改配置XML的风险 如果您对AppCmd不满意,Mike Volodarsky有一篇关于AppCmd的文章,Microsoft非常优秀,它提供了修改每个配置项(例如)的UI、代码和AppCmd示例。还包括一个配置编辑器,允许您从任何现有配置中删除 要将AppCmd集成到WiX中,需要为每个命令创建并计划两个自定义操作。wixv3手册中有一般信息,下面我提供了一个具体的示例 首先,您需要设置一个立即操作以将命令行存储在属性中:
<CustomAction
Id="CreateAppPool_Cmd"
Property="CreateAppPool"
Execute="immediate"
Value=""[WindowsFolder]system32\inetsrv\APPCMD.EXE" add apppool /name:"[APP_POOL_NAME]"" />
<CustomAction
Id="CreateAppPool"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="ignore"
Impersonate="no"/>
接下来,设置一个引用此属性的延迟操作:
<CustomAction
Id="CreateAppPool_Cmd"
Property="CreateAppPool"
Execute="immediate"
Value=""[WindowsFolder]system32\inetsrv\APPCMD.EXE" add apppool /name:"[APP_POOL_NAME]"" />
<CustomAction
Id="CreateAppPool"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="ignore"
Impersonate="no"/>
最后,你需要安排这些。设置属性的即时操作在InstallFinalize之后似乎运行良好,而延迟操作在InstallFiles之后运行良好。我还没有弄清楚回滚操作
MapGuide开源广泛使用这种方法;您可以在我们的文件中看到CA调度,在我们的文件中看到CA定义。这不完全正确。Mike做了大量工作,以使IIS7得到现有CustomActions的支持。不幸的是,代码只支持“遗留”内容。如上所述,集成管线需要自定义代码。好的-我不知道正在进行支持IIS7的工作-我看到一条评论,建议Apache支持可能会更快:p我的印象是,如果打开IIS6元数据库兼容性,一些东西就可以工作了,就是这样。很高兴听到。说清楚,您仍然需要IIS6元数据库的兼容性,但至少它应该可以工作。当我对IIS感到愤怒时,这是我的即时评论。IIS7.5仍然是这样吗?这对我昨天非常有用,也感谢链接到示例!不幸的是,IIS7还不支持IIS扩展。