一、概述
二、ASP.NET Web应用的结构
三、ASP.NET支持的部署机制
四、用XCOPY命令部署
五、用VS.NET的“复制项目”功能部署
六、用Web安装项目部署
6.1 Windows安装程序
6.2 VS.NET Web安装项目的特点
七、创建Web安装项目
八、安装ASP.NET Web应用程序
九、结束语
正文:
一、概述
在深入到配置和部署ASP.NET Web应用程序的具体步骤之前,理解配置(Setup)和部署(Deployment)之间的区别是十分必要的。配置是指将应用包装成易于部署的形式,包装好之后的应用程序可以方便地安装到目标服务器上。部署是一个获得应用程序并将它安装到另一台机器上过程,一般通过安装程序完成。
许多用户都曾经遇到过Windows软件安装技术的脆弱点——当我们安装某个软件的新版本时,安装程序将新版的dll文件复制到系统目录,同时执行所有必要的注册表修改操作,但是,安装操作可能影响其他运行在同一机器上的软件,尤其是原有的软件和新安装的软件共享某一组件时,出现问题的可能性更大。如果新安装的组件与它的早期版本向后兼容,当然没有问题,但许多情况下,完全保持向后兼容难以做到,所以经常会遇到安装了一个新软件之后损坏原有软件的情形,这就是臭名昭著的DLL Hell问题。
Visual Studio.NET(VS.NET)的设计目标之一就是解决安装Windows软件时经常遇到的问题。VS.NET应用的许多功能都依赖.NET框架类库实现,.NET框架类库建立了一个全新的编程模型,从而为极大地简化安装过程创造了条件。另外,VS.NET应用程序编译成程序集(Assembly),程序集是由一个或多个支持程序集运行的文件构成的部署单元。微软.NET框架引入了许多简化应用程序部署、解决DLL Hell问题的新特性,例如,配置信息可以保存在web.config配置文件,web.config配置文件是一个XML格式的文本文件,可以利用XCOPY之类的命令直接复制和部署到目标服务器。
在探讨各种部署机制之前,我们首先来了解一下ASP.NET应用的结构,因为正是这个结构才使得应用能够方便地部署到目标服务器上。
二、ASP.NET Web应用的结构
ASP.NET应用程序由各种Web页面(.aspx和HTML文件)、处理程序、模块、执行代码和其他文件(例如图形文件,配置文件等)构成,这些文件都可以从Web服务器的虚拟目录引用。如果使用了.aspx文件的CodeBehind机制,ASP.NET应用程序还包含编译好的程序集,另外还有其他支持应用程序的程序集,例如,可以把应用的业务逻辑封装成一个单独的程序集。程序集一般位于应用程序虚拟目录的bin子目录下。要理解VS.NET如何简化部署过程,必须理解程序集的结构,因为正是程序集的结构特点才使得简化部署成为可能。程序集包含四种元素:
⑴ MSIL代码,即微软中间语言代码:编译应用程序代码时,源代码被编译成所谓的MSIL代码。MSIL代码是.NET公共语言运行时环境(CLR)所理解的代码。
⑵ 元数据:描述代码中定义的类型、方法和其他元素。
⑶ Manifest:包含名称和版本信息,程序集中包含文件的清单,安全信息,等等。
⑷ 支持文件和资源。
从这个结构可以看出,程序集包含了完整的自我描述信息,所以VS.NET应用程序根本不必象COM组件那样在注册表中注册。这就是说,只要目标机器上也安装了.NET框架,安装VS.NET应用程序时只要简单地将必需的文件复制到目标机器就可以了,这就是所谓的XCOPY部署。不过,除了XCOPY之外,还可以使用VS.NET提供的“Web安装项目”实现自动部署。在接下来的内容中,我们将看到如何利用各种不同的部署机制部署一个Web应用。
三、ASP.NET支持的部署机制
ASP.NET Web应用程序支持下列三种部署方案:
⑴ XCOPY部署
⑵ 利用VS.NET的“复制项目”功能部署
⑶ 使用VS.NET的“Web安装项目”部署
在接下来的内容中,我们将深入了解所有这三种部署机制。为便于说明,我们先要创建一个Visual C# ASP.NET Web应用程序,应用的名称为DeploymentExampleWebApp,如图一所示。
图一
我们将以这个项目为例,阐述部署Web应用的各种方法。
四、用XCOPY命令部署
.NET框架的主要目标之一就是简化部署,例如支持XCOPY部署。在了解.NET如何支持XCOPY部署之前,我们先来看看XCOPY部署到底是怎么回事。在.NET之前,安装一个组件(例如一个COM组件)意味着不仅要把组件复制到适当的目录,而且还要执行注册表修改之类的操作。但现在有了.NET,安装一个组件的全部操作就是将程序集复制到客户应用程序的bin目录,由于程序集包含完整的自我描述信息,应用程序可以立即开始使用程序集。这一切之所以成为可能,是因为编译器将标识符和元数据信息嵌入到了编译好的模块之中,而CLR利用这些信息来装入程序集的适当版本。标识符包含了装入和运行模块、查找程序集引用的其他模块所需的所有信息。这种安装也称为无干扰(Zero-Impact)安装,因为系统不会因为修改注册表、配置组件而受到影响;另外,无干扰安装也使得组件卸载操作不会对系统产生任何意外的影响,卸载组件时只要从特定的目录删除某些文件就可以了。
执行XCOPY部署时,唯一要做的就是打开一个命令窗口,用XCOPY命令将必要的文件复制到服务器的特定目录。图二显示了如何用XCOPY部署将名为DeploymentExampleWebApp的Web应用部署到目标服务器RemoteServer。
图二
可以看到,XCOPY命令有许多选项:
⑴ /E:表示将源位置的目录、子目录和文件都复制到目标位置,包括空目录。
⑵ /K:保留所有现有的文件和文件夹的属性。默认情况下,XCOPY命令复制文件或目录结构时会忽略文件的属性,例如,如果文件原来有只读属性,复制到目标位置后只读属性丢失。要保留原来的文件属性,必须加上/K选项。
⑶ /R:覆盖带有只读属性的文件。
⑷ /O:保留文件或文件夹的所有与安全有关的ACL权限设置。
⑸ /H:隐藏文件和系统文件也要复制。
⑹ /I:要求XCOPY将目标位置视为一个目录,如指定的目录不存在,则创建它。
把文件夹复制到目标服务器之后,接下来在目标服务器上用IIS管理器创建一个虚拟目录,把虚拟目录映射到XCOPY创建的物理目录——这就是用XCOPY将一个ASP.NET Web应用部署到远程服务器所要做的全部操作。
VS.NET的“复制项目”功能使我们能够非常轻松地把ASP.NET Web应用部署到目标服务器。这个功能既可以把Web项目复制到同一服务器,也可以复制到不同的服务器。
如果你用VS.NET开发Web应用程序,发布Web应用之前要做的第一件事情是把“活动的解决方案配置”从Debug改成Release,如图三所示,这个选项不仅使编译器优化代码,而且删除所有与调试有关的符号信息,使代码运行速度更快。打开配置管理器的步骤是:在“解决方案资源管理器”中选择Web应用项目,选择菜单“项目”→“XXXX项目属性”,其中XXXX是项目名称,再点击“配置管理器”。在“活动的解决方案配置”中选择“Release”。
图三
要把Web项目复制到目标服务器,在VS.NET中选择菜单“项目”→“复制项目...”,VS.NET显示出图四的对话框。
图四
“复制项目”对话框提供了下列选项:
㈠ 目标项目文件夹:用来指定复制项目的目标位置。目标位置可以在同一个服务器上,也可以在一个远程服务器上。
㈡ Web访问方法:将Web项目复制到目标文件夹时所用的方法,可供选择的Web访问方法有两种。首先是“文件共享”,即通过文件共享机制直接访问Web服务器上的文件系统,不要求Web服务器上安装有FrontPage服务器扩展;其次是“FrontPage”,即通过基于HTTP协议的FrontPage服务器扩展把Web项目的文件传输到服务器,使用该选项要求Web服务器上必须安装了FrontPage服务器扩展,这种Web访问方法能够在目标服务器上自动创建必要的虚拟目录。
㈢ 复制:包含三个选项,分别是:① 仅限于运行该应用程序所需的文件,即只复制“生成”功能输出的文件(bin文件夹中的 DLL 和引用)以及内容文件(例如.aspx和.asmx文件),大多数情况下,我们可以用该默认选项部署应用程序;② 所有项目文件,即复制“生成”功能输出的文件(bin文件夹中的DLL和引用)和项目中的所有文件,包括项目文件和源程序文件,③ 源项目文件夹中的所有文件,即项目文件夹(或子文件夹)中的所有项目文件和任何其他文件。
根据实际情况选择图四对话框的选项,点击“确定”,即可把Web项目部署到服务器。
六、用Web安装项目部署
XCOPY部署和VS.NET的“复制功能”简单易用,但不能够满足所有的部署需要。例如,如果应用程序有更加复杂的配置和部署要求,VS.NET的“Web安装项目”才是最佳的选择。
虽然我们可以用一大堆的生成输出、安装类、数据库创建脚本来发布Web应用,但对于复杂的Web应用项目,通常不如使用Windows安装程序来得方便。为支持Web应用部署,VS.NET专门提供了一种“Web安装项目”。Web安装项目与普通的安装项目不同,Web安装项目把Web应用安装到Web服务器的虚拟根文件夹上,而普通安装项目一般把应用程序安装到Program Files目录。
由于VS.NET安装程序建立在Windows安装程序的基础上,所以能够利用Windows安装程序的优势。在开始探讨VS.NET Web安装项目之前,我们先来了解一下Windows安装程序的主要特点,因为它是VS.NET Web安装项目的核心基础。
6.1 Windows安装程序
Windows安装程序是一个软件安装和配置服务,Windows 2000和Windows XP操作系统都带有Windows安装程序,而且微软为所有Win 9x和NT 4平台也提供了功能相似的免费版本。在Win2K/XP中,Windows安装程序的核心是一个Windows Installer服务,Windows Installer服务记录了它安装的每一个应用程序,当我们删除一个应用软件时,Windows Installer检查安装记录,在删除应用的组件之前确保其他应用不依赖于这些组件。
Windows Installer将应用划分成以下三个等级:
⑴ 产品:用户可以安装的一个单元。例如,MS Word就是一个用户可以安装的产品。
⑵ 功能:产品由多种功能组成,功能是产品用途的最小单位。例如,自动更正就是Word的一项功能。
⑶ 组件:组件可以看作能够在多个功能和组件之间共享的最小单元。必须注意的是,Windows Installer术语中的组件不同于.NET框架中组件的概念。一个Windows Installer的组件是一个或者多个逻辑上密切相关的文件,它可以是一个执行文件,一个DLL文件,也可以是一个简单的文本文件。一项功能可以由多个组件结合在一起提供,同时,一个组件也可以由多项功能共享。功能总是针对特定的产品而言,且功能的名称只在特定的产品范围内唯一;相比之下,组件是全局性的,其作用范围是一台机器上安装的所有产品。例如,Word的拼写检查组件可以在所有想要实现拼写检查功能的组件之间共享。
与产品有关的信息,包括功能、组件的描述等,都在一个安装数据库中集中保存。安装数据库其实只是一个带.msi扩展名的文件,它不仅包含了产品的功能、组件的信息,而且还定义了安装产品期间各个用户界面的显示次序。由于Windows Installer注册成了.msi文件的服务程序,当用户打开.msi文件时,操作系统会自动调用Windows Installer。按照这种方式启动Windows Installer时,Installer从安装数据库读取产品信息,判断该产品是否已经安装。如果尚未安装,Installer按照安装数据库的描述开始安装操作;如果产品已经安装,可能执行其他处理,例如添加/删除某项功能,或者卸载整个产品。
VS.NET中的部署项目以Windows Installer的功能为基础,允许我们执行如下操作:
⑴ 读取、写入注册键。
⑵ 在目标服务器的Windows文件系统中创建目录。
⑶ 提供注册组件的机制。
⑷ 提供安装期间从用户收集信息的机制。
⑸ 允许设置启动条件,例如检查用户名字、计算机名字、当前的操作系统、已经安装的软件、是否已经安装了.NET CLR,等等。
⑹ 允许在安装结束后运行自定义的配置程序或脚本。
在下面一节中,我们将了解如何用VS.NET Web安装项目来部署DeploymentExampleWebApp。
七、创建Web安装项目
首先我们在DeploymentExampleApp ASP.NET Web应用程序解决方案中创建一个Web安装程序项目:选择菜单“文件”→“新建”→“项目”,在“新建项目”对话框中,指定项目类型“安装和部署项目”,指定模板“Web安装项目”,如图五所示。
图五
创建项目之后,接下来要把ASP.NET Web应用程序的程序集和内容文件加入到安装项目。在解决方案资源管理器中右击DeploymentExampleWebAppSetup项目,选择菜单“添加”→“项目输出”,在“添加项目输出组”对话框中,“项目”一栏选择DeploymentExampleWebApp,再从列表选择“主输出”,如图六。
图六
加入了项目输出之后,接下来要把相关的内容文件(包括.aspx文件、图形文件等)加入到项目。再次打开“添加项目输出组”对话框,这一次从列表选择“内容文件”,如图七。
图七
在Web安装项目中加入了“主输出”和“内容文件”之后,解决方案资源管理器应该类如图八所示。
图八
通过Web安装项目的属性窗口可以设置许多属性,这些属性决定了Windows安装文件运行时显示的内容和行为方式。在解决方案管理器中右击DeploymentExampleWebAppSetup,选择菜单“属性”,就可以打开图九的属性设置窗口。
图九
从图九可以看出,属性窗口允许设置作者、产品描述、厂商、支持电话等信息,这些信息对于应用的最终用户来说可能非常有用。
八、安装ASP.NET Web应用程序
创建好Windows安装文件(.msi文件)之后,再到目标服务器上安装ASP.NET应用就很方便了,只要在Windows资源管理器中双击.msi文件即可,这时安装向导启动,引导用户完成安装过程。图十显示了安装期间显示的第一个对话框。
图十
点击图十对话框的“下一步”按钮,出现图十一的对话框,在这里可以指定Web应用要安装到哪一个虚拟目录。这是VS.NET的Web安装项目最方便的特性之一,虚拟目录创建已完全自动化,根本不需要用户手工操作。在本文的第二部分中,我们将看到如何在安装过程中设置虚拟目录的特殊属性,例如目录安全性等。
图十一
在图十一的对话框中,我们可以点击“磁盘开销”按钮了解安装该Web应用程序所需的磁盘空间。点击“下一步”,出现图十二的对话框,向导要求我们确认安装。
图十二
如果在图十二的对话框中点击“下一步”,安装操作正式开始,应用程序被安装到Web服务器上。如果应用程序安装成功,出现图十三的对话框。
图十三
安装好应用程序后,从控制面板的“添加或删除程序”窗口可以看到刚才安装的ASP.NET应用程序,以后,我们可以随时从这里卸载刚才安装的ASP.NET Web应用。
九、结束语
XCOPY和“复制项目”都是不错的部署技术,主要的特点是简单,但需要一些手工操作。它们非常适合安装过程比较简单的应用,但在有些情况下,我们需要在安装过程中执行更加复杂的操作,这时最好利用Windows Installer技术来部署应用。用Windows Installer来部署ASP.NET Web应用具有下列优点:
⑴ 如果用Windows Installer安装的应用被损坏,可以通过Windows安装包的修复功能自我修复。如果采用其他部署方式,损坏的组件必须手工替换。
⑵ 使用Windows Installer技术时,我们还可以利用自动回退功能的优势。当安装过程失败时,自动回退功能不仅确保已安装的组件被正确删除,而且保证了机器能够恢复到安装程序启动之前的状态。
⑶ 由于Windows Installer用一个.msi安装数据库保存所有的安装信息,所以有可能获取复制了哪些文件、创建了哪些注册键之类的信息。
⑷ 如果ASP.NET应用要分发给多个用户使用(或者将软件打包销售),一种方便、自动化的部署机制是必不可少的,象XCOPY部署这样的手工操作显然是不合适的。如果使用Windows Installer这种成熟、强大的安装技术,整个安装过程都可以自动化,极大地简化应用部署。
这一部分文章示范了封装和部署ASP.NET Web应用的各种方式,介绍了如何利用Windows Installer技术的优势,以及创建.msi的具体过程。在本文的下一部分中,我们将在前面Windows Installer示例的基础上,增添各种高级功能,诸如定制安装对话框及其出现次序,以及安装过程中如何加入注册键、创建定制文件夹,等等。
一、不同类型的部署编辑器
二、文件系统编辑器
三、注册表编辑器
四、文件类型编辑器
五、自定义操作编辑器
六、启动条件编辑器
七、用户界面编辑器
八、部署IIS配置信息
九、VS.NET安装项目 VS. 其他部署方案
正文:
在本文的第一部分中,我们看到了如何用各种不同的方式来部署一个ASP.NET Web应用,包括XCOPY部署、VS.NET的“复制项目”功能、VS.NET的Web安装项目。在这一部分,我们将了解如何利用VS.NET Web安装项目提供的功能,构建复杂的Windows安装程序。在此过程中,我们还将看到如何使用VS.NET Web安装项目模板提供的诸多部署编辑器。
一、不同类型的部署编辑器
当我们部署一个应用程序时,可能需要执行各种特殊的安装操作,例如设置目标服务器上安装目录的结构、添加注册键、检查启动条件,以及调整安装过程中出现的用户界面。VS.NET提供的Web安装项目非常强大、灵活,我们可以轻而易举地完成上述任务。VS.NET提供了下列部署编辑器:
⑴ 文件系统编辑器:将文件加入到安装包。
⑵ 注册表编辑器:定义要在目标机器上创建的注册键。
⑶ 文件类型编辑器:允许将文件扩展名关联到应用程序,当用户打开带有指定扩展名的文件时,应用程序自动启动。
⑷ 用户界面编辑器:指定和设置在目标计算机上进行安装的过程中显示的预定义对话框的属性。
⑸ 自定义操作编辑器:指定安装结束时在目标计算机上执行的附加操作,例如运行将服务器组件与特定消息队列相关联的程序。自定义操作必须编译为.dll或.exe文件,或者作为脚本或程序集添加到某个项目中,只有这样才能添加到部署项目中。自定义操作只能在安装结束后运行。
⑹ 启动条件编辑器:指定要成功运行安装程序必须满足的条件。例如,检查特定版本的操作系统。如果用户在不满足该条件的系统上安装,安装将不能进行。
接下来我们通过实例深入了解上述各种编辑器的使用。
二、文件系统编辑器
从这个编辑器的名称也可以猜出,文件系统编辑器的功能是将项目输出文件、程序集和其他文件加入到部署项目的特定目录。有了这个编辑器,我们还可以指定这些文件要安装到用户计算机的哪一个目录位置。文件系统编辑器可以用如下方式打开:选择菜单“视图”→“编辑器”→“文件系统”。
文件系统编辑器预定义了许多特殊文件夹,我们可以选择这些文件夹作为应用程序的安装目录。有了这些文件系统编辑器定义的特殊文件夹,我们甚至能够在不知道确切路径的情况下,选择目标计算机上的安装位置。文件系统编辑器提供的预定义文件夹主要包括:
⑴ 应用程序文件夹:应用程序文件夹通常可以用[ProgramFilesFolder][Manufacturer][ProductName]路径表示,其中Manufacturer(厂商)和ProductName的值从项目属性的设置获取。
⑵ Global Assembly Cache文件夹:即全局程序集缓冲区文件夹。允许将程序集安装成目标计算机上的共享程序集。
⑶ 用户桌面:即保存桌面项目的位置。该文件夹的默认路径是[DriveName]\Documents and Settings\[UserName]\Desktop,其中UserName是当前正在执行安装的用户的名字。
⑷ 用户的“程序”菜单:用户计算机上放置“程序”菜单项目的位置。默认路径是[DriveName]\Documents and Settings\[UserName]\Start Menu\Programs,其中UserName是当前正在执行安装的用户的名字。
作为一个例子,我们假定要把应用程序的某个程序集安装到Global Assembly Cache文件夹。设置方法是:选择菜单“视图”→“编辑器”→“文件系统”,打开文件系统编辑器,然后右击“目标计算机上的文件系统”,选择“添加特殊文件夹”→“Global Assembly Cache文件夹”。加入Global Assembly Cache文件夹之后,它将以“目标计算机上的文件系统”的子节点的形式出现。接下来就可以将必需的程序集加入到Global Assembly Cache文件夹,加入方法是:右击“Global Assembly Cache文件夹”子节点,并选择菜单“添加”→“程序集”,在“组件选择器”对话框中,选择要添加的程序集。将程序集加入到“Global Assembly Cache文件夹”子节点后,安装程序会自动把程序集复制到目标机器的Global Assembly Cache文件夹。
三、注册表编辑器
顾名思义,注册表编辑器用来管理目标机器上的注册表设置。默认情况下,注册表编辑器将显示出标准的Windows注册键,包括HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE和HKEY_USERS,如图一所示。我们可以在这些键下面添加任意注册键。
图一
由于注册表编辑器显示的内容代表着目标机器上注册表的结构,所以它实际上提供了一个编辑目标机器上注册键的可视化工具,这里加入的注册键将在安装时自动加入到目标机器的注册表中。假设我们要在HKEY_LOCAL_MACHINE下面添加注册键,操作步骤是:右击HKEY_LOCAL_MACHINE,选择菜单“新建Key”,将新加入的子节点命名为Software。现在右击Software节点,加入子节点MyCompany。按照同样的方法,在MyCompany下加入子节点ConfigurationSettings。右击ConfigurationSettings节点,选择“新建”→“字串值”,将字串值的名字改成DBConnectionString,再设置合适的值。设置好之后,注册表编辑器的内容如图二所示。
图二
在目标机器上安装好应用之后,目标机器上的注册表也将包含图二所示的ConnectionString。
四、文件类型编辑器
文件类型编辑器允许设定要求安装程序在目标机器上建立的文件关联,即将特定的文件扩展名关联到对该类文件采取各类操作时要启动的应用程序。建立关联之后,Windows资源管理器中就会出现该类文件的扩展名及其描述。如果应用程序用到了某种自定义的文件类型,而且对这类文件执行各种操作时必须启动独立的外部应用程序,文件编辑器提供的机制是很有用的。
在VS.NET中选择菜单“视图”→“编辑器”→“文件类型”,打开文件类型编辑器。下表显示了将文件扩展名关联到特定的应用程序时,应当设置的重要关联属性。
属性 作用
Name 为该类文件指定一个类型名称。
Command 用户对该类文件执行操作时应当启动的应用程序
Extensions 指定该类文件的扩展名
Icon 指定该类文件的图标。
Description 有关该类文件的简短描述
五、自定义操作编辑器
允许在安装时运行其他程序。自定义操作的运行顺序与它们在编辑器中的显示顺序相同。可通过鼠标拖动或使用“编辑”菜单上的“剪切”和“粘贴”命令将自定义操作重新排序。
六、启动条件编辑器
利用这个编辑器可以设定目标机器必须满足的条件。如果用户试图在一个不能满足启动条件的系统上运行安装程序,安装程序将拒绝执行。设定启动条件时,我们可以要求安装程序搜索目标机器,查找是否存在特定的文件、注册键或组件。图三显示的启动条件编辑器提供了两类设定条件的选项:
㈠ 搜索目标机器:指定在目标机器上执行的搜索操作,例如搜索特定的文件、注册键等。
㈡ 启动条件:允许检查目标机器上是否存在特定的应用,例如IIS、.NET框架,等等。
图三
下表提供的清单显示了可以通过启动条件编辑器设定的启动条件。
条件 作用
文件启动条件 用来搜索目标系统上已安装的文件。
注册表启动条件 安装开始之前搜索注册键。
Windows安装程序启动条件 搜索Windows安装程序文件。
.NET Framework启动条件 检查目标计算机上是否存在.NET Framework。
Internet信息服务(IIS)启动条件 检查已安装的IIS的版本。
■ 检查目标机器上是否安装了.NET Framework
作为一个例子,假设我们要在安装期间检查目标机器上是否存在.NET Framework。选择菜单“视图”→“编辑器”→“启动条件”,右击“目标计算机上的要求”,选择菜单“添加.NET Framework启动条件”,这样就设置好了.NET Framework启动条件。当用户试图在没有安装.NET Framework的机器上安装应用,安装程序将提示用户必须安装.NET Framework才能继续执行安装。
七、用户界面编辑器
顾名思义,用户界面编辑器的作用是设置在目标机器上安装期间用户界面对话框出现的序列。
图四
如图四所示,用户界面编辑器包含两类安装模式:
⑴ 安装:列出了最终用户执行安装程序时将要显示的所有对话框。
⑵ 管理员安装:列出了当管理员将安装程序上载到一个网络位置然后执行安装时将要显示的对话框。
在“安装”和“管理员安装”模式中,预定义的对话框又可以分为三类:
⑴ 启动对话框:安装开始之前显示的对话框。
⑵ 进度对话框:向用户显示出安装进度的对话框。
⑶ 结束对话框:显示出安装已经顺利完成的对话框,可以让用户通过该对话框启动应用程序。
调整用户界面对话框显示序列很方便,只要用拖放的方式把对话框移到适当的位置就可以了。即使不作配置,图四显示的一组默认对话框总是在应用程序的安装期间显示出来。
■ 加入一个启动画面
在用户界面编辑器中,我们可以方便地加入安装期间要显示的额外的对话框。右击“启动”节点,选择“添加对话框”,在“添加对话框”窗口中,从对话框清单中选择要添加的对话框,即“启动画面”,参见图五。将对话框加入之后,我们可以用拖放的方式调整其显示时机。
图五
由于“启动画面”总是在安装开始的时候显示,所以我们要把它拖到对话框序列的最前面。在启动画面窗口中,我们可以显示一个位图,加入位图的方法是:右击用户界面编辑器中的“启动画面”节点,选择菜单“属性窗口”,将SplashBitMap属性的值设置为一个适当的图形文件(bmp或jpg文件)。
八、部署IIS配置信息
在准备部署ASP.NET应用程序的时候,一个必须考虑的重要问题是如何在部署应用的同时部署IIS的配置信息。如果用直接复制的方法部署Web应用,例如用XCOPY命令、Windows资源管理器的复制功能、FTP操作等,部署操作显然不涉及IIS的配置信息,IIS的配置必须单独设置,或者在目标机器上手工设置,或者编写脚本程序自动设置。
如果用VS.NET的“复制项目”功能部署应用,目标服务器上会自动创建虚拟目录,但IIS的配置信息仍旧不会复制到目标服务器上新建的虚拟目录,新建的虚拟目录只是从Web网站继承默认的设置,也就是说,我们仍旧要单独设置IIS的配置信息。只有用Web安装项目来部署ASP.NET应用程序,我们才可以让安装程序自动在目标机器上设置IIS的配置信息。
要配置虚拟目录的设置信息,首先打开文件系统编辑器,右击“Web应用程序文件夹”,选择菜单“属性窗口”,打开图六的“属性”窗口。
图六
在图六对话框中,我们可以配置许多重要的属性,包括:
⑴ AllowDirectoryBrowsing:允许设定指定目录的IIS目录浏览属性。这个设置项目相当于IIS管理器中Web网站属性对话框目录设置页的“目录浏览”检查框,可以设置为True或False。
⑵ AllowReadAccess:该属性允许设定文件夹的IIS“读取”属性,可以设置成True或False。
⑶ AllowScriptSourceAccess:该属性设置文件夹的IIS“脚本资源访问”属性。
⑷ AllowWriteAccess:该属性设置文件夹的IIS“写入”属性。
⑸ ApplicationProtection:该属性设置文件夹的IIS“应用程序保护”属性,可以设置成vsdapLow、vsdapMedium、vsdapHigh。
⑹ AppMappings:该属性设置文件夹的IIS“应用程序映射”属性。
■ 设置其他IIS属性
某些IIS配置属性不能在Web安装项目的属性窗口中直接设置,包括目录安全的配置(匿名访问,基本验证或Windows验证)、自定义错误等。
但是,我们可以用其他办法解决问题,其中一种很有效的办法是在Windows安装文件中采用“自定义操作”。如前所述,我们可以用“自定义操作”在安装结束时运行一些代码,完成安装期间未能执行的操作,自定义操作的代码可以是DLL、执行文件、脚本或程序集。
■ 安装ASP.NET Web应用
创建好Windows安装文件(.msi文件)后,在目标服务器上安装ASP.NET应用就很方便了,只要在Windows资源管理器中双击.msi文件就可以启动安装向导,安装向导将帮助用户完成整个安装过程。安装好ASP.NET应用程序后,我们可以在控制面板的“添加或删除程序”功能中看到该应用程序,而且可以利用“添加或删除应用程序”功能随时删除已安装的ASP.NET应用。
九、VS.NET安装项目 VS. 其他部署方案
如前所述,我们可以用下列方案之一来部署ASP.NET Web应用:
⑴ XCOPY或VS.NET的“复制项目”功能。
⑵ VS.NET的Web安装项目。
任何技术都有局限,用XCOPY和“复制项目”功能部署.NET应用也不例外。一般地,它们只适用于比较简单的、允许手工操作的场合,同时用于即时更新也很理想。但是,在某些场合,XCOPY不太适用,我们需要某种更加强大的部署方案,例如:
⑴ .NET应用程序用到了一些COM组件,我们想要自动部署这些COM组件(而不想手工部署),必须在安装期间完成这些COM组件的注册。
⑵ 需要在远程计算机上把一个程序集预编译成本机代码。
⑶ 需要将一些程序集安装到远程机器的Global Assembly Cache。
⑷ 需要将一个应用程序安装成Windows服务。
⑸ 打算创建桌面快捷方式、把程序加入到“添加或删除程序”清单、创建“开始”菜单的快捷方式,等等。
在上面这些情况下,我们需要一种更加强大的部署方案,这就是VS.NET提供的Web部署项目。许多时候,实际使用某种部署方案的是最终用户,最终用户往往缺乏手工配置应用所必需的技能,VS.NET的Web安装项目提供了很容易使用的用户界面,把安装期间必须执行的各种复杂的配置操作全部自动化。不仅如此,VS.NET的Web安装项目还有下列优势:
⑴ 当我们安装一个应用程序时,有关应用的所有信息都被记录在一个Windows安装数据库中。如果我们要删除该应用程序,系统会检查安装数据库,确认其他应用程序不依赖于某些将要被删除的组件,从而避免臭名昭著的DLL Hell问题。
⑵ 如果安装失败,可以执行彻底的回退,从系统清除一切安装痕迹。
结束语:在这篇文章中,我们探讨了部署ASP.NET Web应用程序的各种方案,包括XCOPY、VS.NET的“复制项目”功能,以及VS.NET的Web安装项目,了解了各种部署方案的优缺点及其适用场合。希望本文介绍的内容对你有所帮助。