本文介绍了利用Install Shield制作应用程序安装软件的方法。在文中作者除了对常用的一些技术进行介绍外,还对安装过程位图的显示、标题和背景的定制等高级技术作了简要的阐述,本文所述方法能够满足大多数安装软件的制作需求。
关键字: 安装软件制作;Install Shield
阅读导航
|
||
程序框架的建立
|
1、建立安装程序工程 | |
2、工作区中的选项卡的功能 | ||
3、当前属性的修改 | ||
4、脚本代码分析 | ||
必要的完善 | 1、添加程序文件 | |
2、创建快捷方式 | ||
3、编写脚本代码 | ||
安装程序的发布 | 1、发布媒介向导对话框 |
|
2、Builder Type向导页 | ||
3、Tag File向导页 | ||
4、Platform向导页 | ||
界面设计 | 1、修改启动画面 | |
2、定制标题 | ||
3、定制背景颜色 | ||
4、显示位图 |
4、脚本代码分析
下面对向导生成的脚本代码进行分析,在Scripts页中双击Setup.rul项即可在右侧编辑视图察看如下结构的脚本代码:
#include "sdlang.h" #include "sddialog.h" …… // 函数声明 prototype ShowDialogs(); …… // 全局变量声明 BOOL bWinNT, bIsShellExplorer, bInstallAborted, bIs32BitSetup; …… // 主程序 program …… endprogram // 调用函数 …… #include "sddialog.rul" |
代码开始的这两个包含语句引入了预定义语言标识的头文件和Sd对话框的头文件。其中Sd对话框是一种脚本对话框(Script Dialog),是按InstallScript特定的机制来创建的,调用Sd对话框的函数均以Sd开头。除了在开始添加上述包含语句外,还要在endprogram语句后添加#include "sddialog.rul"语句,以将Sd对话框的实现脚本文件包含进来。随后由prototype关键字在program之前定义了函数的原型声明,其函数实现则要在endprogram之后才能给出。按照InstallScript的规定,在函数体内不允许声明变量,只能在全局声明变量或是在函数名后、函数体前声明局部变量,而且在声明变量时不允许同时为变量设置初始值。program和endprogram这两个关键字定义了主程序的开始与结束,其内代码即是对全部安装过程的描述:
program Disable( BACKGROUND ); CheckRequirements(); SetupInstall(); SetupScreen(); if (ShowDialogs()<0) goto end_install; if (ProcessBeforeDataMove()<0) goto end_install; if (MoveFileData()<0) goto end_install; if (ProcessAfterDataMove()<0) goto end_install; if (SetupRegistry()<0) goto end_install; if (SetupFolders()<0) goto end_install; end_install: CleanUpInstall(); // If an unrecoverable error occurred, clean up the partial installation. // Otherwise, exit normally. if (bInstallAborted) then abort; endif; endprogram |
上述代码首先通过Disable()函数指定安装过程不使用背景色,然后调用CheckRequirements()检查当前系统是否能够满足被安装程序正常运行所需要的最低要求,并通过SetupInstall()和SetupScreen()来建立安装界面的初始化。随后的这一系列if条件判断语句即是开始执行各个安装步骤,如果某一安装步骤出现错误,则通过goto语句跳转到end_install标签处,在通过CleanUpInstall()清除已经安装的文件后退出安装。其中,ShowDialogs()函数负责显示诸如用户信息、选择安装路径等对话框,由ProcessBeforeDataMove()、MoveFileData()和ProcessAfterDataMove()负责处理数据的复制事宜。最后通过SetupRegistry()完成注册,通过SetupFolders()在桌面或开始菜单创建相应的快捷方式。这些函数的具体实现过程可以在endprogram后面的函数体实现中找到,并可按自己的需要对向导生成的缺省代码进行修改。
对于此向导创建的程序框架,可通过Build菜单下的Compile和Run Setup菜单项来编译和运行。由于这时创建的只是一个空的程序框架,因此整个安装过程将不进行任何实质性工作,即不进行数据文件的复制和对安装的注册。
必要的完善
为了使向导生成的框架工程能够真正安装应用程序,还需要通过InstallShield开发环境提供的各种向导对工程作进一步的设置,甚至还需要直接修改或添加部分脚本代码,以使安装程序能够完成数据文件的复制、安装的注册以及在桌面或开始菜单创建必要的快捷方式等功能。
1、添加程序文件
首先向文件组添加要安装的程序文件。在File Groups选项卡中展开各文件组,并用鼠标右键点击各文件组下的Links项,选择弹出菜单的Insert Files菜单项以将待安装软件中的各文件添加到相应的文件组。对于没有用到的文件组,可以在该文件组上鼠标右键弹出菜单并通过Delete菜单项删除该文件组项。接下来切换到Components选项卡,在选中某组件项后,右侧列表视图将显示该组件项的相关属性,双击Include File Groups项将弹出图13所示的对话框,点击Add按钮并从弹出的对话框中添加与该组件项相关的文件组即可。在将所有的文件组添加到组件项后,将未用到的组件项删除。删除方法与删除文件组一样。
2、创建快捷方式
为了在桌面或开始菜单创建快捷方式,还应在Resources选项卡添加相关的Shell对象。在该选项卡中展开各项目(如图15所示)。
其中的Desktop、Start Menu、Programs和Startup项分别对应于操作系统的桌面、开始菜单、程序和启动。可以在相应的项目下添加相应的文件夹或快捷方式。添加方法为,在要添加文件夹或快捷方式的图标项上点击鼠标右键,从弹出菜单的New菜单项下选择Folder或Shortcut项即可。图16为添加了文件夹和相关快捷方式后的Resource选项卡设置。
在点击添加的快捷方式,在右侧窗口将显示快捷方式的属性,双击属性列表将弹出图17所示的快捷方式属性对话框。在Shortcut栏输入快捷方式的文本字符或是通过右边的“>>”按钮弹出对话框并从中选用预定义的字符串资源。
Target栏为快捷方式的链接路径,<TARGETDIR>/为用户在安装时所选择的路径,可以在此基础上指定具体的应用程序路径。至于字符串资源的添加,只需在String Table(见图16)中的相应语系所对应的字符串资源列表中点击鼠标右键,并从弹出的菜单中选择New菜单项,将弹出图18所示的对话框,从可以添加字符串的标识、内容以及注释:
3、编写脚本代码
通过上述属性设置已经可以对程序进行安装,如果软件还需要使用序列号进行保护或是其他一些向导所没有提供的功能,也可以通过在Scripts页编写脚本代码来加以实现。例如,向导生成的脚本代码中虽然提供了用来处理用户在安装过程输入的序列号的DialogShowSdRegisterUserEx()函数,但并未对输入的序列号进行认证,下面给出添加了序列号认证的相关代码:
function DialogShowSdRegisterUserEx() NUMBER nResult; STRING szTitle, szMsg; begin svName = ""; svCompany = ""; szTitle = ""; szMsg = ""; Dlg_Register: // 输入注册序列号 nResult = SdRegisterUserEx( szTitle, szMsg, svName, svCompany, svSerial ); if (nResult = NEXT) then // 对序列号进行认证 if (StrCompare( svSerial , "ABCDEFG-HIJKLMN-OPQRST-UVWXYZ") != 0) then MessageBox ( "输入的序列号 "+svSerial+" 不正确!" , WARNING ); // 如果序列号输入错误则重新输入序列号 goto Dlg_Register; endif; endif; return nResult; end; |
2、Builder Type向导页
接下来是如图21所示的Build Type向导页,Full Build选项将全部创建所需要的文件数据,包括压缩应用程序的所有文件、创建CAB文件及Setup.exe程序等;Quick Build选项则只是测试、检查安装程序能够按预期的方式进行。
Advanced按钮将弹出图22所示的高级属性对话框,可以在其中设置口令、文件的时间/日期、媒介创建的目标位置等高级属性。
3、Tag File向导页
在下一步的Tag File向导页(图23)中将输入诸如公司名称以及其他一些与应用程序相关的信息,这些信息将被保存到Data.tag文件中。
4、Platform向导页
继续向导,在图24所示的Platform向导页中选择可以使用的平台后,将完成对媒介发布向导的设置并出现如图25所示的简表。该简表对前面的向导设置进行了汇总,如果发现有设置错误,可以通过上一步回到相应的向导页面对其进行更正。
点击完成按钮将开始根据上述设置来创建发布媒介(见图26)。
最后,在发布媒介创建完成后,点击图26所示对话框的Finish按钮完成发布媒介的创建。此时的Media选项卡将包含刚才创建的发布媒介(见图27)。
新创建的发布媒介中的Disk Images项给出了创建的发布媒介的磁盘映像,其下的Disk1、Disk2等项对应于发布该安装程序的每一张磁盘/光盘的映像,在选中某磁盘项目时,右侧列表视图将显示该磁盘映像项目所包含的安装文件列表。Log Files项则是用来对发布媒介日志记录的管理。
最后,在完成创建的媒介文件到发布磁盘或相应的文件夹的复制后即完成了一个基本安装盘的制作。可以在新创建的媒介项目上点击鼠标右键,并从弹出菜单中选择Send Media To菜单项,将弹出如图28所示的发送媒介向导对话框,可以在该向导页中指定媒介文件是复制到硬盘中的某个文件夹还是直接复制到发布软盘。在随后的向导中,只需指定相应的路径并进行数据复制即可。运行发布媒介中的Setup.exe文件即可进行应用程序的安装。
界面的设计
前面介绍的方法固然能够制作出一个具有基本安装功能的程序,但由于没有对界面进行任何处理,而直接使用向导缺省设置下的安装界面。为了使制作的安装程序不落俗套,避免缺省设置下的单调界面,通常都需要根据被安装软件的性质而对界面进行重新设计。安装界面的设计通常主要针对标题、启动画面和安装程序背景等进行。
1、修改启动画面
首先对安装程序的启动画面进行更改,此前应先准备好要使用的素材图象,画面不宜过大。如果是其他格式的图象应先将其保存为bmp格式的位图,并将文件名改为Setup.bmp。安装程序将在开始运行时自动显示以该文件名命名的图象。在工作区的Setup Files页面,将可以看到Splash Screen项,在该项目下有Language Independent和各支持的语系项,点击各项目,将在右侧列表视图中显示当前使用的缺省的启动画面Setup.bmp,选中后将其删除。接下来将要添加新的启动画面,如果对于各个语系均使用相同的启动画面,那么就在Language Independent项中添加,如果对于不同的语系有相应的启动画面,那么就在各个语系项中添加与之相对应的启动画面。具体添加办法是在选中要添加的项目后,在右侧列表视图中点击鼠标右键,从中选取Insert File菜单项即可。需要注意的是,在完成上述设置后,编译运行安装程序并没有使用新的启动画面,应在Media选项页中通过向导重新建立发布媒介后,新更改的启动画面才能够生效。
2、定制标题
接下来对安装程序的标题进行定制,在向导生成的SetupScreen()函数中通过SetTitle()函数来完成主标题的显示,缺省设置参数为24点大小的白色字符,使用缺省字体。可以在使用SetTitle()之前调用SetFont()来使用指定的字体。SetFont()函数原型为:
SetFont (nItemID, nFontStyle, szFontName); |
其参数nItemID为要设置的字体项目,目前只能设置为FONT_TITLE,即只能对主标题进行设置。nFontStyle为字体风格,允许的设置为STYLE_NORMAL、STYLE_BOLD、STYLE_ITALIC、STYLE_SHADOW和STYLE_UNDERLINE,分别表示正常、加粗、斜体、阴影和下划线风格的字体,除了STYLE_NORMAL风格外,其他几种风格都允许组合使用。使用的字体由szFontName来指定,如果执行安装程序的系统中没有安装该字体,那么将仍使用缺省的字体。例如,下面这段代码将显示带阴影效果的、加粗的、使用“华文彩云”字体的32点大小的主标题:
// 设置字体 SetFont ( FONT_TITLE , STYLE_BOLD | STYLE_SHADOW , "华文彩云" ); // 使用32点大小的字体 SetTitle( @TITLE_MAIN, 32, WHITE ); |
3、定制背景颜色
目前,安装程序的背景界面为单一的暗青色,InstallShield脚本程序允许用户设置一个预定义的或是自定义的背景颜色,而且还可以指定为颜色渐变。具体由SetColor()函数完成,该函数共包含两个参数,第一个参数通过BACKGROUND或STATUSBAR来指出是为背景指定颜色还是为进度条指定颜色。第二个参数即为设定的颜色值及颜色模式(是否渐变)。预定义的颜色值有:
BK_BLUE 渐变的蓝背景色
BK_GREEN 渐变的绿背景色
BK_MAGENTA 渐变的紫背景色
BK_RED 渐变的红背景色
BK_YELLOW 渐变的黄背景色
BK_SOLIDBLUE 蓝色(用于背景)
BK_SOLIDGREEN 绿色(用于背景)
BK_SOLIDMAGENTA紫色(用于背景)
BK_SOLIDRED 红色(用于背景)
BK_SOLIDYELLOW 黄色(用于背景)
BK_SMOOTH 与自定义颜色组合为渐变的背景色。
GREEN 绿色(用于进度条)
RED 红色(用于进度条)
BLUE 蓝色(用于进度条)
MAGENTA 紫色(用于进度条)
YELLOW 黄色(用于进度条)
除了可以直接使用上述预定义的颜色外,也可以使用RGB()定义的自定义颜色,如果需要使用自定义的渐变色可以将其与BK_SMOOTH共同使用即可。例如:
nColor = RGB(0, 0, 255); SetColor (BACKGROUND, BK_SMOOTH | nColor); |
和
SetColor(BACKGROUND, BK_BLUE) |
都可以产生蓝色渐变的背景色。需要说明的是,在指定背景颜色时,应当保证背景是可以设置的,因此上述更改背景色的代码应当在Enable(BACKGROUND)语句后进行。
4、显示位图
最后,再来介绍一下安装过程中对位图的显示。在安装过程中所能够显示的位图只有BMP和WMF这两种格式的位图。首先准备好素材位图并将其转换为可使用的位图格式,然后在Setup Files属性页中将这些文件添加到相应的项目中,这里所说的“相应”是指将要显示的图片与语系、操作系统相对应起来。例如,要添加的位图是用于英文Windows NT下的,那么就在Setup Files属性页中先找到语系“English”,然后再在该语系下找到相应的操作系统。具体的添加办法与添加启动位图一样。
在将位图添加到安装文件后,就可以通过PlaceBitmap()函数在指定的位置显示位图了。PlaceBitmap()函数原型如下:
PlaceBitmap (szName, nID_BITMAP, nDx, nDy, nDrawOp); |
参数szName为要显示的位图,nID_BITMAP为位图的ID号,参数nDrawOp为图片在窗口中的放置位置,可以根据情况使用下述选项之一:
TILED 平铺位图
FULLSCREENSIZE 拉伸至全屏
CENTERED 居中显示
LOWER_LEFT 在左下角显示位图
LOWER_RIGHT 在右下角显示位图
UPPER_LEFT 在左上角显示位图
UPPER_RIGHT 在右上角显示位图
REMOVE 清除以前放置的位图
参数nDx,和nDy则表示在当前方式方式下的图象放置坐标
在同一窗口界面下将不能同时显示两幅位图。因此,在显示下一幅位图之前需要通过REMOVE操作符将第一幅位图清除,然后才能显示下一幅位图。另外,在设置图像文件路径时,由于安装程序是在其他用户的计算机中运行,因此不能使用位图在本地计算机的绝对路径,而应从刚才添加过位图的Setup Files属性页中获取。下面这段代码给出了陆续显示两幅位图的过程:
// 在新位置显示新位图 PlaceBitmap ( SUPPORTDIR ^"step4.bmp" , 4 , 10, 100, UPPER_LEFT ); …… // 删除上一幅位图 PlaceBitmap ( "" , 4 , 0, 0, REMOVE ); // 在新位置显示新位图 PlaceBitmap ( SUPPORTDIR ^"step5.bmp" , 5 , 10, 10, LOWER_RIGHT ); |
这里在使用REMOVE操作之前,为PlaceBitmap ()的nID_BITMAP参数指定了一个位图ID号,这样再用PlaceBitmap()执行REMOVE操作时就不用再次指定相应的图像文件名了。
除了上述提到的一些用户界面函数外,还有许多其他用途的用户界面函数,InstallShield为所有API函数的使用提供了一个向导(见图29),其中就包含有用户界面函数。点击工具条上的Function Wizard按钮将可以启动该向导,左侧列表框给出了API函数的分类。在选中User Interface项后,右侧列表框将显示所有可用的用户界面函数,在选中某API函数后,将可以通过向导很简单的实现对参数的设置。
结论
本文以Install Shield 6.0为工具制作了一个可以安装待发布软件的安装程序。多用在商业或较正式软件的发布等场合,而这一类的软件通常都会有升级、更新的问题,使用Install Shield 6.0开发的安装工程可以很方便的解决这一问题,只需在File Grops页中以新版本的文件去替换旧版本的相应文件,并重新编译、发布即可,而不必为每一个版本的软件去开发一套与之相应的安装程序。
不足之处是此处没有讲解如何添加卸载功能。
本文转自:http://hi.baidu.com/fengyun8749/blog/item/f34b0dd27b6975c1562c84e1.html,在此对原作者表示感谢