提纲:
一、概述
二、
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
的
“
复制项目
”
功能部署
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
按照安装数据库的描述开始安装操作;如果产品已经安装,可能执行其他处理,例如添加
/
删除某项功能,或者卸载整个产品。
6.2 VS.NET Web
安装项目的特点
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
安装项目,了解了各种部署方案的优缺点及其适用场合。希望本文介绍的内容对你有所帮助。