在用户界面设计器里,你可以看到如下窗口。这些窗口以他们安装场景显示分组的顺序罗列出来。你会看到列表中有两个setup版本,一个是普通用户安装,另一个是管理员安装。你可使用 /a 参数来得到管理员安装功能。通常在需要网络安装时才使用管理员安装。
为了明白实际Setup安装窗口象什么就必须实际地去安装Setup,或者参考 MSDN 帮助,它描述了每一种方式的属性并且显示它们的外观。 setup 项目是无法象普通应用程序那样进行调试的。
有许多方式定制安装程序的用户界面:
- 修改窗口选项。每个窗口提供一套不同的选项。选择窗口,检查属性窗口,看看什么选项可以用到。
- 通过右击窗口,选择 上移 或 下移 可重新安排窗口的顺序。
- 右击窗口,选择 删除 可以从安装项目中除去一个窗口。
- 右击一个安装场景,选择 添加对话框 可以添加一个新的预定义窗口。
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");
}