分享
 
 
 

创建Windows安装项目-Part 1(下)

王朝system·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

创建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项目中。

为应用程序在程序菜单里创建一个文件夹(这里我们用 FontViewer)。

右击新建的这个文件夹然后选择创建它的快捷方式。会有一个特殊窗口提示你选择setup项目中的一个文件作为快捷方式的目标。

一旦你选择了目标,快捷方式会被添加。你可以给它更名,并且利用属性窗口可以配置其它选项。

到这里,你已经拥有了一个简单的全功能setup程序了。可以用它生成单独的 .msi 文件,用它安装 FontViewer 应用程序。下面我们设计一个非常简单的欢迎安装界面,可以提示安装路径,显示复制文件和快捷方式的进度条,然后以一个常用信息提示结束安装。你可以看到下面这部分是如何修改这些元素的。

定制用户界面

在用户界面设计器里,你可以看到如下窗口。这些窗口以他们安装场景显示分组的顺序罗列出来。你会看到列表中有两个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");

}

Part 1尾声

本文中,你已经知道 .NET 是如何结合Windows Installer 软件打包的。关于 Windows Installer 技术的其它信息可以在 Windows 文档中(如这里的在线文档)和到处都是的MSDN帮助文档中找到。

本文解释了MSI的基础性的东西,在本系列的Part 2部分,我们将着眼于某些高级的选项,包括安装条件、定制操作以及文件类型注册等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有