当前位置:文档之家› InstallShield脚本语言基础

InstallShield脚本语言基础

InstallShield脚本语言基础
InstallShield脚本语言基础

InstallScript是专门用来编写InstallShield安装程序的脚本语言。由于InstallScript和C 语言极为相似,因而使得Visual C++用户编写安装脚本程序颇为得心应手。即使对于没有任何语言基础的用户来说,编写InstallScript程序也不会觉得无从下手,因为InstallScript 程序结构是非常简单的。并且,

InstallScript为用户提供了超过250个的内部函数,从而使得用户不需要太多的代码就能编写出具有专业水准的安装程序来。

2.1 InstallScript程序结构

同其他程序设计语言一样,InstallScript脚本语言也有自己的程序结构。

2.1.1 几个InstallScript程序

下面先来看看几个比较简单的InstallScript程序。

[例Ex_Hello] 一个简单的InstallScript程序,用来弹出"问候"对话框。

STRING szTitle;

program

szTitle = "问候";

SetDialogTitle (DLG_MSG_INFORMATION, szTitle);

MessageBox("您好!", INFORMATION );

endprogram

程序中,program...endprogram构成主程序体,每一个InstallScript程序中都必须包含一个且只有一个这样的主程序体。在主程序体外,只能是变量定义、用户函数定义以及预处理指令等,而程序体内可以包括若干条语句,每一条语句都由分号";"结束。本例中,SetDialogTitle和MessageBox都是InstallScript的内部函数,它们分别用来设置对话框的标题和显示指定的信息文本,INFORMATION是一个系统预定义的常量,szTitle变量是在程序体外定义的字符串变量。

[例Ex_Func] 自已定义一个函数,用来显示消息对话框。

STRING szTitle; // 定义一个字符串变量

prototype MyMessage(STRING, STRING); // 自定义函数的声明

program

szTitle = "问候";

MyMessage(szTitle, "您好!");

endprogram

function MyMessage(szTitle, szMessage) /* MyMessage函数体*/

begin

SetDialogTitle (DLG_MSG_INFORMATION, szTitle);

MessageBox(szMessage, INFORMATION );

end;

尽管本例的结果和Ex_Hello示例相同,但它使用了自定义函数MyMessage。InstallScript语言规定,一个自定义函数名必须在program关键字前面声明,而函数体代码

的实现代码必须在endprogram后进行,且每个自定义的函数体都必须以begin开始end 结束(注意end后要有分号";")。程序中的"/*...*/"之间的内容或"//"开始一直到行尾的内容是用来注释的,它的目的只是为了提高程序的可读性,对编译和运行并不起作用。正是因为这一点,注释的内容可以用汉字来表示,也可以用英文来说明,只要便于理解就行。

[例Ex_Include] 使用包含文件。

#include "Sddialog.h";

STRING szTitle, szMsg, svDir;

program

szTitle = "SdAskDestPath Example";

svDir = "C:\\EXAMPLE\\TARGET";

szMsg = "";

// 获取用户指定的安装路径

if (SdAskDestPath(szTitle, szMsg, svDir, 0) = NEXT) then

TARGETDIR = svDir;

endif;

// 显示用户指定的安装路径

SprintfBox(INFORMATION, "SdAskDestPath", "Successful.\n\nThe Target " + "directory is: " + TARGETDIR);

endprogram

#include "Sddialog.rul"

该程序是使用Sd(Script Dialog,脚本对话框)对话框函数的一个示例。InstallScript语言规定,在调用Sd对话框函数时,需要在program前加上#include "Sddialog.h"语句,而在endprogram后加#include "Sddialog.rul"。与C语言相似,#include "Sddialog.h"和#include "Sddialog.rul"是InstallScript的编译指令,称为预处理指令。InstallScript编译系统会根据预处理指令#include中的文件名,把该文件的内容包含进来。也就是说,实际程序的代码长度是在原来长度的基础上增加了Sddialog.h和Sddialog.rul文件的长度。程序中,SprintfBox参数内容中的"\n"是换行符,即在"Successful."文本后回车换行。

2.1.2 InstallScript程序的基本组成

从上面的几个示例可以看出,一个InstallScript程序往往由预处理命令、函数、语句、变量以及注释等几个基本部分组成的。

(1) 预处理命令

在InstallScript程序的一开始经常出现含有以"#"开头的命令,它们是预处理命令。InstallScript提供了三类预处理命令:宏定义命令、文件包含命令和条件编译命令。

(2) 函数

一个InstallScript程序是由若干个函数组成的。这些函数中,有的是InstallScript系统中所提供的内部函数,有的是用户根据自己需要自己编制设计的函数(如例Ex_Func中的MyMessage)。

(3) 语句

语句是组成程序的基本单元,它可以是用来判断的条件语句,也可以是用来反复运行的循环语句等。这些语句是组成InstallScript程序中的最重要部分之一。

(4) 变量

大多数程序离不开变量。InstallScript变量的类型比较简单,主要有数值型(NUMBER)、字符串型(STRING)以及链表型(LIST)等,例如例Ex_Hello中的szTitle是一个STRING型变量。

(5) 注释

程序的目的不仅在于实现某种功能、解决某个问题,而且还在于数据结构和算法的交流。因此在程序中添加必要的注释是非常重要的,它能提高程序的可读性,帮助用户对程序的理解。

需要说明的是,InstallScript不支持控制台的输入和输出,数据的输入和输出是通过对话框进行的。

2.1.3 InstallScript程序的书写风格

尽管InstallScript语言比C或C++语言容易理解,但对于初学者来说,一开始就养成良好的编程习惯仍然是非常重要和必要的。

1. 标识符命名

标识符是用来标识变量名、函数名、结构名、文件名等的有效字符序列。标识符命名的好坏直接影响程序的可读性,例如a1b1、c1d虽然是合法的标识符,但却是不好的标识符,因为它不能让人理解它们所代表的含义。下面几个原则是命名时所必须注意的:

(1) 合法性

InstallScript规定标识符由大小写字母、数字字符(0—9)和下划线组成,且第一个字符必须为字母或下划线。任何标识符中都不能有空格、标点符号及其他字符,例如下面的标识符是不合法的:

93Salary,Youhe.Ding,$178,#5f68,r

注意,InstallScript中标识符的大小写是有区别的。例如,data、Data、DaTa、DATA等都是不同的标识符。

用户定义的标识符不能和系统的关键字同名。以下是43个InstallScript关键字:

abort begin BOOL BYREF

case CHAR default downto

else end elseif endfor

endif endprogram endswitch endwhile

exit for function GDI

goto HWND if INT

KERNEL LIST LONG NUMBER

POINTER program prototype repeat

return SHORT step STRING

switch then to typedef

until USER while

需要注意的是,用户定义的标识符还不能和InstallShield的函数名、系统变量名以及预定义的常量名相同。

(2) 有效性

虽然,标识符的长度(组成标识符的字符个数)是任意的,但最好不能超过32个,因为InstallShield的编译系统只能识别前32个字符,也就是说前32个字符相同的两个不同标识符被有的系统认为是同一个标识符。

(3) 易读性

在定义标识符时,若能做到"见名知意"就可以达到易读性的目的。为了达到这个目的,许多Visual Basic、Visual C++及Delphi等程序员广泛使用匈牙利的命名规则来定义标识符,InstallScript也使用这个<

命名规则。

匈牙利的命名规则是将标识符的类型(小写)来作为标识符的前缀。例如前面的szTitle 表示一个字符串变量,其中的sz表示STRING变量类型。表2.1列出了常用变量的前缀。除此之外,对于函数名的命名往往使用多个单词来组成,每个单词的第一字母都是大写,例如前面的SdAskDestPath函数名。

2. 缩进和注释

缩进是指程序在书写时不要将程序的每一行都由第一列开始,而且在适当的地方加进一些空行或空格。它同注释一样,也是为了提高程序的可读性。

注释的重要性已在前面论及过,这里不再重复。但要注意的是:

(1) 注释应在编程的过程中同时进行,不要指望程序开发完成后再补写注释。那样只会多花好几倍的时间,更为严重的是,时间长了以后甚至会读不懂自己写的程序。必要的注释内容应包含:脚本程序的总体注释(文件名、作用、创建时间、版本、作者及引用的手册、运行环境等)、函数注释(目的、算法、使用的参数和返回值的含义、对环境的一些假设等)及其他的少量注释。千万不要陈述那些一目了然的内容,否则会使注释的效果适得其反』些空行或空格。它同注释一样,也是为了提高程序的可读性。

注释的重要性已在前面论及过,这里不再重复。但要注意的是:

(1) 注释应在编程的过程中同时进行,不要指望程序开发完成后再补写注释。那样只会多花好几倍的时间,更为严重的是,时间长了以后甚至会读不懂自己写的程序。必要的注释内容应包含:脚本程序的总体注释(文件名、作用、创建时间、版本、作者及引用的手册、运行环境等)、函数注释(目的、算法、使用的参数和返回值的含义、对环境的一些假设等)及其他的少量注释。千万不要陈述那些一目了然的内容,否则会使注释的效果适得其反。

相关主题
文本预览
相关文档 最新文档