基于IIS Express的.Net应用程序部署

IIS Express已经正式发布,并在短时间内更新了两次,目前的最新版本是V1.10。IIS Express的特性,实际上是许多.Net下WEB开发人员多年来的一个梦想,因为传统的IIS,尤其是7.0版本以前的IIS,对于WEB应用程序的部署是一个很让人头疼的事情,光是让用户能顺利安装好IIS环境,就得费不少的心思。为此,我在2008年专门研究并制作发布了全网首个IIS 5.1自动安装程序和IIS 6.0自动安装程序,并发布了制作原理和方法,详见:还为安装IIS发愁吗?全系列IIS自动安装程序倾囊奉送!--技术原理介绍及成品下载

如今,梦想的事情终于让微软发善心给实现了。尽管,它还有些不完美的地方,却仍然让我激动了很久。

本文不打算介绍IIS Express的基本知识和概念,需要这方面内容的朋友,可以参考以下文章:

IIS Express 的配置、使用和注意点

IIS Express的安装与设置讲解

写这篇随笔的主要目的,是为了将我以IIS Express为平台部署.Net应用程序的过程中发现的一些问题和总结的一些经验介绍给大家,以补充一下网上关于IIS Express的资料的一些空白。

第一个发现:直接把IIS Express安装后产生的文件用来作为部署环境,不一定可靠。

按网上现有的资料,是可以直接把IIS Express的安装目录连同应用程序一起打包进行发布和部署的,实际上在多数情况下也的确可以正常运行。但经过多次在不同Windows版本上进行测试,发现这样要么可能会出现“无法正常初始化应用程序”的问题,要么IIS Express的托盘图标不能显示出来。经过对比发现,在不同版本的Windows上安装IIS Express所产生的文件并不完全相同。所以,最好还是在通过IIS Express安装程序进行安装后,再调用IIS Express来运行网站。

第二个发现:如果要部署基于.net 2.0的应用程序,除了要安装.net 4.0(这是IIS Express所必需的)外,还需要有.net 2.0 sp2才能正常运行。在Vista、Windows 7等新版本的操作系统上,这不是问题,但在XP、Windows 2003上,就必须要单独安装.net 2.0 sp2才行了。

第三个发现:以.net 4.0作为系统必备制作出来的安装包,在XP SP2和Windows 2003上可能无法正常完成安装。这是因为它们通常不具备.net 4.0所必须的Windows Imaging Component组件。因此,制作安装程序的时候,必须把Windows Imaging Component也作为系统必备。

总结:要制作基于IIS Express且可以在多个Windows版本上顺利安装的.net 2.0应用程序安装包,至少应该包括这几个系统必备:.net 2.0 sp2、.net 4.0、IIS Express、Windows Imaging Component。但问题在于,目前并没有现成的net 2.0 sp2、IIS Express中文版、Windows Imaging Component这三个组件的系统必备组件包。当然了,你可以要求用户自己手工安装这些,但这不是一个好软件所就有的做法。我们的目标是,用户安装我们的WEB应用软件,要像安装单机软件一样,运行setup.exe就可以完成安装。

关于如何制作Visual Studio安装项目的系统必备,这属于另一个较为复杂的话题了,暂且不谈。只是另外有一个关于这方面的一个技巧,值得与大家分享,那就是,如果一个安装项目需要多个系统必备,怎样才能有选择性地让一个组件从供应商网站下载,而另一个组件从应用程序安装包的位置安装?在Visual Studio安装项目选择系统必备的界面上,是只能统一处理的,要么都从网站下载,要么都从应用程序安装包位置安装,而不能自由指定。比如,由于IIS Epxress安装包很小,且几乎所有电脑都没有安装它,因此可以打包到我们的程序安装包中,而像.net 3.5或5.0这种庞大的,而很多用户电脑中又已经具备的组件,就可以让安装程序在确实需要安装它的时候再从网上下载安装。

实现我们这种想法的关键在于:如果在Visual Studio中指定了系统必备从网站下载,但系统必备的产品清单上又没有提供下载网址的话,安装程序就会尝试从应用程序安装包所在位置来查找需要的组件进行安装。所以,我们只需要在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages下面的系统必备组件产品清单文件product.xml中,删除组件的下载地址属性HomeSite,再重新生成安装项目就可以了。

IIS Express是一个新鲜事物,值得大家的深入研究。希望朋友们可以补充更多的经验和技巧!