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菜单项来编译和运行。由于这时创建的只是一个空的程序框架,因此整个安装过程将不进行任何实质性工作,即不进行数据文件的复制和对安装的注册。
|