创建Windows安装项目-Part 1(下)
作者: Wrox Team
发表:2003.3.6
翻译:邹建强
接上期:http://www.csdn.net/Develop/read_article.asp?id=21370
支持文件
可以手动添加一些文件供应用程序使用(如位图、定制的数据文件等等)。仅需要右击上面提到的文件夹列表,选择添加文件,然后浏览选择正确的文件(也可通过选择添加文件夹 创建任何你需要的子目录)。你选择的文件会被复制到目标计算机对应的位置上。
项目输出
你应该为你的应用程序项目输出添加一些重要的.NET程序集。这会确保每次生成setup文件时文件会被自动生成。同时也要确保所要求的从属程序集被包括。为了给这个FontView应用程序添加项目输出,右击应用程序文件夹选择添加项目输出 。
这个窗口允许你从当前解决方案中的任意一个项目中输出。一旦你选择了恰当的项目,你就可以选择输出类型。
主输出添加了由引用项目生成的程序集,以及一些从属的程序集。这是通常的选项(你也可以给Release .NET设置配置 选项以确保setup程序总是使用程序集的release版本,而不用担心当前IDE的设置)。
本地化资源 使用了这个项目的附属程序集,它包含了本地指定的资源。
源文件 包括了所有引用项目的文本源文件件。因为这些文件不包括实际编译的程序集,所以从属程序集不会被自动包括进来。
任何从属的程序集会被自动引用。在这种情况下,从属程序集 mscorlib.cfgmscorlib.dll(.NET framework 的核心部分)会被包括。
在添加 .NET 程序集时,.NET 可重发布文件被自动加入到 setup 项目中,这可以允许把你的应用程序安装到没有安装.NET运行时环境的计算机上。这会使你的setup项目的大小迅速膨胀(大约从100K到15MB以上)。如果客户已经安装了.NET framework,那么就要除去这些组件以节省空间。这是在示例 FontViewer 中所采取的方式。
右击解决方案资源管理器中的dotnetfxredist_x86_enu.msm 合并模块,然后选择移除(Exclude).
可以添加捷方式。比较典型的是在桌面文件夹上、启动文件夹、用户收藏夹创建,最常见的是在程序菜单中应用程序指定的子目录中创建。
给应用程序FontViewer创建快捷方式遵循如下步骤:
到这里,你已经拥有了一个简单的全功能setup程序了。可以用它生成单独的 .msi 文件,用它安装 FontViewer 应用程序。下面我们设计一个非常简单的欢迎安装界面,可以提示安装路径,显示复制文件和快捷方式的进度条,然后以一个常用信息提示结束安装。你可以看到下面这部分是如何修改这些元素的。
在用户界面设计器里,你可以看到如下窗口。这些窗口以他们安装场景显示分组的顺序罗列出来。你会看到列表中有两个setup版本,一个是普通用户安装,另一个是管理员安装。你可使用 /a 参数来得到管理员安装功能。通常在需要网络安装时才使用管理员安装。
为了明白实际Setup安装窗口象什么就必须实际地去安装Setup,或者参考 MSDN 帮助,它描述了每一种方式的属性并且显示它们的外观。 setup 项目是无法象普通应用程序那样进行调试的。
有许多方式定制安装程序的用户界面:
几个预定义窗口中,你可以添加一个到安装向导当中。每个窗口仅被添加一次,然后从选择列表中显示出来。每一设计窗口仅仅是为单一的目的,提供的配置选项非常少。几乎所窗口都提供了一个 BannerBitmap 属性,允许你指定一个图像文件,它显示在窗口顶部空白的banner区内(默认的图像是一个电脑)。其实窗口类型的选项如下:
窗口类型 | 描述/属性 |
启动画面窗口 | 在安装开始时用于显示公司或产品图像。提供: Sunken 属性,布尔型; SplashBitmap 属性,提供闪屏图像 |
欢迎窗口 | 介绍性窗口。通过 CopyrightWarning 属性和 WelcomeText 属性显示文本信息 |
许可协议窗口 | 提供一许可信息窗口,在进行下面安装前要求用户选择“同意”。许可信息是从 LicenseFile 属性中指定的 .rtf 文件抽取出来的,并且在窗口上是以 Sunken 属性显示出来的 |
客户信息窗口 | 提供一个要求用户名的窗口。利用布尔型属性 ShowOrganization 和 ShowSerialNumber,你也可以要求额外的信息。利用 SerialNumberTemplate 可以执行简单的序列号合法性校验,这会在下面的部分中介绍。 |
安装进度窗口 | 将 ShowProgressBar 属性设置为 True ,会显示出进度条。 |
用户注册窗口 | 允许用户通过一个独立的程序注册。它提供了一个“现在注册”按钮,点击可以启动一个可执行程序,或者启动了一个Web页面。可以通过 Executable 和 Arguments 属性指定这个应用程序。 |
自述文件窗口 | 通过 LicenseFile 属性指定的 .rtf 文件显示信息。窗口中是以 Sunken 属性显示的。 |
用界面设计器可能对大多数开发者而言有些令人失望,因为它允许的定制相当有限。你能添加和重新安排预建的窗口类型,但是你不能设计一个全新的窗口,或是添加一部分自定义的代码。微软把更多的钱放在了一致性和简单性上,而不是复杂性。
可以使用序列号模板(在客户信息窗口中的 SerialNumberTemplate 属性)阻止一个没有合法序列号的用户安装。模板定义了序列号如何被格式化。然而,你不能直接确认序列号。相反,你必须使用已经构建在Windows Installer产品当中基于模板的校验程序,对所有应用程序而言这可能还不够。
起初,SerialNumberTemplate 被大于号和小于号括起来(即“<”和“>”),这些符合不会在文本框中直接显示出来。也可以用短划线把序列号分隔在多个文本框内。
对于模板自身可以使用下面的字符:
别的任何字符都被文字常量对待。校验算法(对于“%”和“?”而言)已经被构建进了Windows Installer 服务当中。 它合计所有的数字,并且除以7。如果余数是0,则校验成功,否则失败。
FontViewer 安装程序使用的模板是 <%%D-##-##>,它使用了三个文本框。最后四个字符必须是数字,第三个字符必须是字母“D”,并且头两个数字之和必须被7整除(例如一个合法序列号:77D-00-00)。
我将介绍的最后的一个特点就是FontView 安装程序自动添加注册表项。注册表设计器界面非常类似于 regedit.exe 程序。你可以在注册表上的一个节点浏览,并通过右击选择合适选项添加键或值。这些设置会写入目标电脑的注册表当中。注意:你不能删除已有注册项,这会阻止潜在的破坏性修改。
对于我们的注册表设置而言,我们使用被安装程序认知的特殊变量。这些变量通过方括号识别。在运行时状态,对于[Manufacturer] 和 [Product](它们在安装项目的属性窗口中被设置)和 [CUSTOMERNAME](客户在注册窗口中指定它)安装程序互换适当的值来创建注册表设置 HKEY_LOCAL_MACHINE\ProseTech\FontViewer\Customer。有关描述安装注册项目变量的更多细节会在个系列的Part 2中讲解。
为了结合这个变化,应用程序 FontViewer 只是稍微修改了一下。现在在标题栏上显示的是安装客户的客户名称。
Here's the required code in the FontViewer application:
private void main_Load(object sender, EventArgs e)
{
// (Original code omitted for space.)
RegistryKey rk;
rk = Registry.LocalMachine.OpenSubKey(
"Software\\ProseTech\\FontViewer");
if (rk != null) this.Text += " - " + rk.GetValue("Customer");
}
本文中,你已经知道 .NET 是如何结合Windows Installer 软件打包的。关于 Windows Installer 技术的其它信息可以在 Windows 文档中(如这里的在线文档)和到处都是的MSDN帮助文档中找到。
本文解释了MSI的基础性的东西,在本系列的Part 2部分,我们将着眼于某些高级的选项,包括安装条件、定制操作以及文件类型注册等。
本文地址:http://com.8s8s.com/it/it45356.htm