坐禅垫:Visual C .NET编程讲座之八

来源:百度文库 编辑:微思作业网 时间:2019/08/25 14:49:29
程序的安装和部署
摘要
本文先来介绍安装和部署前的准备,然后用向导创建一个安装和部署项目,并修改项目的属性,最后讨论如何使用自己的标题图像、添加"序列号"对话框及生成程序菜单项和桌面图标。
安装和部署前的准备
一旦应用程序项目开发好了之后,就要创建一个安装程序供用户进行安装。早期的安装程序大多数是使用InstallShield来制作的,InstallShield一个最大的特点是可以使用其内嵌的脚本语言InstallScript来定制自己的安装过程和安装界面。不过,现在我们还有一个更简便的选择,那就是使用Visual Studio.net来创建程序安装和部署项目。
在将程序发布之前,我们需要将应用程序项目生成进行重新配置,即将原来默认的Debug(调试)版本变成了Release(发布)版本。具体步骤如下:
(1) 启动Visual Studio .NET,打开上一讲的单文档应用程序项目Viewer。
(2) 打开"生成"菜单,单击"配置管理器",弹出对话框。
(3) 在"活动的解决方案配置"中选择"Release",结果如图1所示。

图1 "配置管理器"对话框
(4) 单击"关闭"按钮。打开"生成"菜单,单击"生成解决方案"。生成完后,关闭该解决方案。
需要说明的是,在用MFC应用程序向导创建的项目中,可以有Win32 Debug和Win32 Release两个版本。这两个版本的区别是:Debug版本的运行程序有相应的调试信息代码,而Release版本的运行程序则没有,但Release版本的运行程序经过代码的优化,其程序的运行速度被最大加速。因此一般来说,当用户在将开发的应用程序发布给用户之前,应将项目调试后将其编译成Win32 Release版本。编译和生成后的有关文件被放置在项目名文件夹下的Release子文件夹中。对于Debug版本,其编译和生成后的有关文件被放置在Debug子文件夹中。
创建一个安装和部署的项目
Visual Studio.net不仅提供了创建基于Windows 或基于Web的应用程序和组件的安装程序的工具,也提供了创建用于下载的.Cab 文件的工具。与InstallShield不同的是,Visual Studio.NET使用Microsoft Windows Installer来提供程序安装和配置的功能。
Visual Studio.NET为用户安装和部署项目提供四种类型的模板:合并模块项目、安装项目、Web 安装项目和 Cab 项目。此外还提供了两个安装程序向导,可帮助我们完成创建部署项目的过程。下面我们使用安装向导来创建一个安装项目。
(1) 打开"文件"菜单,选择"新建"->"项目",弹出"新建项目"对话框。
(2) 单击左侧的项目类型"安装和部署项目",选择右侧的"安装向导"模板,输入项目名称"ViewerSetup",指定一个项目位置,如图2所示。

图2 "新建项目"对话框
(3) 单击"确定"按钮,出现如图3所示的对话框。

图3 向导"第1步"对话框
(4) 单击"下一步"按钮,出现如图4所示的对话框。这里,可以选择安装项目类型以及重新发布的打包类型。

图4 向导"第2步"对话框
(5) 保留默认的选项,单击"下一步"按钮,出现向导"第3步"对话框。单击"添加"按钮,在弹出的"添加文件"对话框中,将前面的Viewer应用程序可执行文件添加进来,结果如图5所示。

图5 向导"第3步"对话框
(6) 单击"下一步"按钮,出现如图6所示的对话框,显示出我们在前面几个步骤中作出的选择内容。

图6 向导"第4步"对话框
(7) 单击"完成"按钮,系统开始创建。需要说明的是,单击"上一步"按钮可对前面的操作进行修改。
(8) 打开"项目",选择"添加"->"合并模块",选定用于MFC应用程序本地化支持的两个模块,一个是MFC_Loc_FE.msm(东南亚地方)和VC_MFC.msm(MFC的支持),单击"打开"按钮。
生成和测试
(1) 打开"生成"菜单,单击"生成解决方案",系统就会在指定项目位置下的"ViewerSetup\Debug"中为该安装项目生成一个ViewerSetup.msi安装文件。
(2) 在解决方案资源管理器中,右击顶层节点"ViewerSetup",从弹出的快捷菜单中单击"安装",启动Windows Installer,进行应用程序的安装过程。开始出现的是安装"欢迎"对话框,如图7所示。

图7 "欢迎"对话框
(3) 单击"下一步"按钮,进入"选择安装文件夹"对话框,如图8所示。

图8 "选择安装文件夹"对话框
(4) 单击"下一步"按钮,进入"确认安装"对话框,如图9所示。

图9 "确认安装"对话框
(5) 单击"下一步"按钮,系统开始安装,并显示安装进度,最后显示安装完成对话框,如图10所示。

图10 "安装完成"对话框
(6) 单击"关闭"按钮,退出安装。这就是ViewerSetup默认的安装过程。
修改项目属性
(1) 在解决方案资源管理器中,单击顶层目录的"ViewerSetup"。在属性窗口中出现如图11所示的属性。

图11 项目属性
具体属性含义可参见MSDN中的说明,需要注意的是:
1、为保证UpgradeCode、PackageCode和ProductCode三种属性值的唯一性,最好保留其默认值。
2、在Windows资源管理器中选定某安装程序文件(.msi),右击鼠标,从弹出的快捷菜单中选择"属性"命令,则Author、Description、Keywords和Subject等属性显示在其属性对话框的"摘要"标签页上。而在应用程序安装后,属性Author、Description、Manufacturer、ManufacturerUrl、SupportPhone和SupportUrl显示在"支持信息"对话框中,如图12所示,该内容可从系统的"添加/删除程序"对话框中相应程序的"查看支持信息"得到。

图12 "支持信息"对话框
(2) 在属性窗口中,将Author属性内容改为"丁有和"。Author用来指定应用程序或组件的作者名或联系人。
(3) 将Manufacturer属性内容改为"计算机编程维护与技巧 杂志社"。Manufacturer用来指定应用程序或组件的开发公司或发行商。
(4) 将ManufacturerUrl属性内容改为"www.comprg.com.cn",ManufacturerUrl用来指定Manufacturer的网址。
(5) 将ProductName属性内容改为" 文本浏览器 "(注意文本前后要留有空格)。ProductName用来指定在目标计算机上安装应用程序或组件时用于描述该应用程序或组件的公共名称。默认为部署项目的名称。
(6) 将Subject属性内容设为"文本浏览器"。Subject用来指定在目标计算机上安装应用程序或组件时用于描述该应用程序或组件的其他信息。
(7) 将Title属性内容改为"文本浏览器"。Title用来指定安装程序的标题。默认情况下,Title属性与部署项目的名称相同。
(8) 右击解决方案管理器顶层目录ViewerSetup,从弹出的快捷菜单中选择"重命名",键入"文本浏览器 安装"后按Enter键。
(9) 打开"生成"菜单,单击"重新生成解决方案"。
(10) 打开"项目"菜单,单击"安装",看看出现的界面的变化。
使用自己的标题图像
"标题图像"是用来显示在安装对话框中的位于标题栏下方的图像,它是宽度为 500 像素、高度为 70 像素的位图。下面就来改变对话框中的安装标题图像。
(1) 打开Windows中的"画图"工具,并将其图像大小设置为500 x 70。
(2) 在最右侧添加一个用于产品标识的图像(自己构造),结果如图13所示,将该位图保存到Banner.bmp文件中。

图13 制作标题位图
(3) 在Visual Studio.net中,打开"项目"菜单,选择"添加"->"文件",将刚才创建的Banner.bmp文件添加当前安装项目中。
(4) 打开"视图"菜单,选择"编辑器"->"用户界面",在窗口中显示出"用户界面"编辑器,如图14所示。

图14 "用户界面"编辑器
在"用户界面"编辑器中,安装过程中所出现的对话框均在这里以"树视图"形式显示出来。用户界面分为"一般安装"和"管理员安装"两大类。"一般安装"用于最终用户运行安装程序时将显示的对话框,"管理员安装"部分用于系统管理员将安装程序上载到网络位置时将显示的对话框。
(5) 单击"欢迎使用",将在属性窗口中出现这个对话框的属性,其中BannerBitmap属性用来指定对话框的标题图像的。
(6) 在属性窗口中,单击BannerBitmap属性栏右侧的下拉按钮,从弹出的列表中选择"(浏览…)",出现如图15所示的对话框。

图15 "选择项目中的项"对话框
(7) 双击"应用程序文件夹",出现前面添加的标题图像文件Banner.bmp,选中它,单击"确定"按钮。这样,该对话框的标题图像就设置好了。类似的,还可以为其他所有的对话框进行设置。
(8) 重新生成并安装,结果出现的"欢迎使用"对话框如图16所示。

图16 定制后的"欢迎使用"对话框
添加"序列号"验证对话框
程序安装时往往需要序列号为限制非法安装,下面就来实现。
(1) 在"用户界面"编辑器中,右击"安装"下的"启动"节点,从弹出的快捷菜单中选择"添加对话框",出现如图17所示的对话框。

图17 "添加对话框"
(2) 由于"序列号"是产品的一种客户信息,因此我们单击"客户信息",然后单击"确定"按钮。
(3) 在"用户界面"编辑器中,将"客户信息"节点拖放到"欢迎使用"与"安装文件夹"之间。
(4) 在"客户信息"属性窗口中,将BannerBitmap属性修改为"Banner.bmp"。
(5) 将SerialNumberTemplate属性修改成""。SerialNumberTemplate属性决定文本框在对话框中的显示方式,并确定是仅对序列号的格式进行验证,还是按照Windows 安装程序算法对序列号进行验证。SerialNumberTemplate属性的有效可编辑字符可以是"#?%^<>",其中#表示要求输入一个数字,该数字将不包括在验证算法中。%表示要求输入一个数字,该数字将包括在验证算法中。?表示要求输入一个字母数字字符,该字符将不包括在验证算法中。^表示要求输入一个大写字母或一个数字。<和>表示该字符左边或右边的所有字符在对话框中都不可见。
(6) 将ShowSerialNumber属性设置为True,结果如图18所示。

图18 修改的"客户信息"属性
(7) 这样,重新生成安装后,出现如图19所示的"客户信息"对话框。

图19 "客户信息"对话框
需要说明的是,若自己验证序列号,也就是说序列号等于某个字符串,则需要进行自定义操作。由于自定义操作需要更多的底层代码,因此这里不作讨论。
生成程序菜单项和桌面图标
在Windows中运行程序的最常用快捷方式是在程序中创建菜单项或在桌面中创建快捷图标。下面就来创建。
1. 生成程序菜单项
(1) 在"文件系统"编辑器中,右击"用户的‘程序‘菜单",弹出快捷菜单,将鼠标指针指向菜单中的"添加",弹出子菜单,单击子菜单中的"文件夹"。将该文件夹名称改为"文本浏览器"。
(2) 单击"文本浏览器",在右侧列表视图窗口处右击鼠标,弹出快捷菜单,单击"创建新的快捷方式"。弹出如前面的图15所示的"选择项目中的项"对话框。
(3) 在对话框中,双击"应用程序文件夹",然后单击"Viewer.exe",单击"确定"按钮。
(4) 单击创建的快捷方式"Viewer.exe 的快捷方式",在属性窗口中将Name属性改成"运行 文本浏览器"。
(5) 在属性窗口中,单击Icon属性右则的下拉按钮,从中选择"(浏览…)",在弹出的"图标"对话框中,单击"浏览"按钮,在"选择项目中的项"对话框中,选中"应用程序文件夹"后,单击右侧的"添加文件",将Viewer项目文件夹中的Viewer.ico文件添加。
(6) 单击Viewer.ico,再单击"确定"按钮。此时"图标"对话框如图20所示。

图20 "图标"对话框
(7) 单击"当前图标"中的图标,然后单击"确定"按钮,这里属性窗口中的属性变成如图21所示的内容。

图21 修改后的程序快捷方式属性
需要说明的是:
Arguments属性用来为所选的自定义操作指定命令行参数。仅适用于.exe自定义操作。
ShowCmd属性用来为通过快捷方式启动的应用程序指定窗口状态(正常vsdscNormal、最小化vsdscMinimized或最大化vsdscMaximized)。
Target属性用来指定目标计算机上由快捷方式启动的应用程序的路径和文件名。
Transitive属性用来确定在目标计算机上安装或重新安装应用程序或组件时,安装程序是否重新计算选定的文件夹、文件、注册表键或注册表值的Condition属性。此属性是一项高级功能,应谨慎使用,一般使用其默认值False。
WorkingFolder属性用来指定文件夹的名称,在目标计算机上的该文件夹中安装选定快捷方式的目标应用程序。
(8) 在左侧单击"文本浏览器",将其AlwaysCreate属性设为True。
(9) 重新生成安装后,在"开始"菜单中的"所有程序中"中出现如图22所示的程序菜单。

图22 安装后的程序菜单项
2. 创建桌面图标
(1) 在"文件系统"编辑器中,单击"用户桌面",将其AlwaysCreate属性设为True。
(2) 在编辑器的右侧窗口处,右击鼠标,从弹出快捷菜单中选择"创建新的快捷方式"。弹出如前面的图15所示的"选择项目中的项"对话框。
(3) 在对话框中,双击"应用程序文件夹",然后单击"Viewer.exe",单击"确定"按钮。
(4) 单击创建的快捷方式"Viewer.exe 的快捷方式",在属性窗口中将Name属性改成"文本浏览器"。
(5) 单击"文本浏览器"。在属性窗口中,将Icon属性设为Viewer.ico文件中的图标。
(6) 重新生成并安装。
结束语
本讲重点讨论了程序的安装和部署,一旦安装项目制作好以后就可以在项目文件夹下Debug中的文件制成安装盘。在本讲座中,我们领略了用VisualC++.net进行应用程序开发的一般过程,从中可以发现其功能的强大,当然要想更加深入地使用该工具,还应在实践中不断磨练。不过,这里还有强调的是,一定要用Visual C++ .NET做一个项目。(全文完)