创建Windows安装项目-Part 1(上)
http://www.devarticles.com/art/1/450/
作者: Wrox Team
发表:2003.3.6
翻译:邹建强
译注:译者对照原文作者的操作步骤都测试了一下,有些操作方式与中文版的不太相同,或许是版本的差异,译者的版本为VS.NET 2003中文版。因此如果存在差异,我都会针对我的版本给出操作指导,并且保留英文译文。
另外原文中的有关菜单及对话框按钮的中文译法均按照VS.NET 2003中文版实际显示名称
转摘请注明出处
由于原文作者Wrox团队还没有出Part 2部分,因此目前译文仅给大家提供Part 1内容,以后等Part 2有了后,我会翻译给大家。很奇怪Wrox为什么这么长时间没有出Part 2。
概要
有关“零接触”(zero-touch)或XCopy部署的特点已经有太多的讨论。因此,如果你开发了一个应用程序想分发给多个用户(或者打包销售)的话,你需要一个方便自动的方法。Visual Studio .NET的MSI(Windows Installer projects)提供本地支持的方法。这些项目(MSI)被用于做安装程序,安装程序可以选择性的复制文件,建立快捷方式和注册表设置,并可以接收用户的输入。本文中,我们思考了如何为.NET桌面应用程序使用VS.NET构造一个简单的安装程序。
Windows Installer服务介绍
MSI 技术对于.Net 应用并不是很明确。实际上,它包含了 Windows 操作系统的所有版本(Windows 2000/ME/XP),对于 Windows 98 和 Windows NT 4 而言,它作为一个独立下载的软件包也可为其所用。它的特点包括:
支持系统维护的安装数据数据库。Windows 用户利用这个数据库卸载软件而不会破坏别的应用程序。
支持自我修复,这个特点允许修改和删除文件,这些文件会自动从 Windows 安装程序中提取恢复。如果有个好奇的用户做了些不计后果的操作,它会允许恢复你的应用程序。你所要做的就是右击你的最初安装文件并根据上下文菜单选择修复即可。
支持交换式安装。如果有个用户取消了安装,或是安装一半时失败,那么安装时所造成的任何变化都会被撤消,仅仅留下与安装装前完全一样的状态。
Windows 安装文件总是以.msi 为扩展名,它被注册到 Windows Installer服务上(一般是 C:\WINNT\System32\msiexec.exe)。尽管它们看上去与一般的安装程序无异,但是 MSI 文件不包含传统上孤立的一个安装程序(.exe 文件)。相反,它们依靠构建在 Windows 操作系统的安装服务上。这项服务提供了几个预定义的对话框和有限数量的预先调整配置。
注意到 Windows 安装项目不是真正的.NET项目这一点很重要。它们不是用.NET语言来编码的,当然也不会使用 CLR。因此,Visual Studio .NET 能帮你很轻松地建立基于.NET程序的 Windows 安装项目,自动照顾程序集和从属项。完全不用写安装脚本,用 你可以利用Visual Studio .NET设计器和属性窗口提供的选项进行配置。
项目示例
我们会在本文当中建立一个.NET项目的安装示例,如下所示:
此例程允许用户从下拉列表中选择字体。这个字体将通过一个Paint事件句柄画在 form 表面上。form 代码如下(已经除去了 Windows 设计器区域的代码):
public class main : System.Windows.Forms.Form
{
private void main_Load(object sender, EventArgs e)
{
InstalledFontCollection fonts = new InstalledFontCollection();
foreach (FontFamily family in fonts.Families)
{
lstFonts.Items.Add(family.Name);
}
}
private void main_Paint(object sender, PaintEventArgs e)
{
if (lstFonts.Text != "")
{
try
{
e.Graphics.DrawString(lstFonts.Text, new Font(lstFonts.Text,
50), Brushes.Black, 10, 50);
statusBar.Panels[0].Text = "";
}
catch (Exception err)
{
statusBar.Panels[0].Text = err.Message;
}
}
}
private void lstFonts_SelectedIndexChanged(object sender, EventArgs e)
{
if (lstFonts.Text != "") this.Invalidate();
}
}
创建 Windows 安装项目
你可以利用上面的例子创建一个 Windows 安装项目,或者把它添加到一个已有的解决方案中。后面的解决方案通常更好,因为它能保障项目源文件与安装程序在同一个解决方案中很方便地链接在一起。我们使用别的字体浏览程序这也是一种途径。
开始时,打开一个要求安装程序的已存在项目。在Solution Explorer 窗口中右击解决方案,并且选择 Add New Project 。选择 Setup Project and Deployment Projects 。(译者注:以上操作并不能与中文版相吻合。把中文版上测试时用的步骤一并写出来供参考:在打开一个已存在项目后,打开“文件”/“添加项目”/“新建项目”/“安装和部署项目”)
在你键入项目名称后,点击“确定”。
同时你需要配置一下你解决方案的生成选项,否则你从 IDE 中运行都要运行这个程序,源项目与安装项目都将会被生成。一个典型的安装程序要花几分钟生成,这绝对是浪费时间、令人厌烦的过程。
为了改变这种情况,可进行如下操作:右击在解决方案资源管理器当中你刚新建的安装项目,然后选择“属性”。出现如下窗口。选择“配置属性”并清除此安装项目“生成”选项的检查框 (VS.NET 2003中文版操作有所不同,出现如下窗口后,选择“配置管理器”,在配置管理器当中清除“生成”选项的检查框)。
现在安装文件不会被自动创建了。手动创建时,只要选择上面的“生成”选项就可以了。
安装设计器
创建一个安装项目时,Visual Studio .NET 提供了几种不同的设计器,每一种只配置安装程序的一个方面。为了看清所有能用的设计器,在解决议案资源管理器当中右击你建立的安装项目名,然后选择“视图”。
文件系统设计器允许复制文件到目标计算机中。可以使用预定义文件夹,或者选择几个公共的文件夹(译者注:Program Files、桌面、程序菜单等)。
注册表设计器允许添加新的键和键值到目标计算机注册表当中。
文件类型设计器允许为你的应用程序注册一个文件扩展名(通过双击这样的文件来自动启动你的程序)。这些设置也可通过注册表设计器进行,但是涉及的操作会很多。
用户界面设计器允许一个默认的用户安装界面(它被自动提供),或者也可以添加自定义的对话框。
自定义操作设计器允许你链接另外的程序,在安装程序结束后启动它执行额外的配置操作。
起动条件设计器允许你描述为了安装和运行所必须满足的条件(译者注:基于.NET环境支持的程序可以通过这个项目进行检测目标计算机系统环境是否满足)。
你还可以设置更多的基本选项,如:作者、生产厂家、厂家链接、标题、产品名称以及来自项目属性窗口的版本号。其中大部分描述信息被用在安装向导或者别的窗口对话框,象支持信息窗口(它可以从填加/删除程序 窗口中启动)。你还可以在当前已安装程序的列表中设定代表你程序的图标(AddRemoveProgramsIcon)。
添加文件、项目输出和快捷方式
创建安装程序的第一步是指定你想复制到目标计算机的文件,通过文件系统设计器进行。你可以指定添加这些文件到一个系统确认的文件夹下面,如:System文件夹、Fonts文件夹、GAC(Global Assembly Cache)文件夹,或者甚至是用户的My Documents 文件夹。也可以把文件添加到一个硬编码路径(利用自定义文件夹选项)里,或是用户为应用程序选择的目录下(Application文件夹)。下面显示的是所有被支持的文件夹选项列表:
文件系统设计器窗口被分成两个面板:左边是文件夹列表,右边是当前选中的文件夹列表。可以右击文件夹列表选择添加特殊文件夹来添加一个新的文件夹。