InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加。
一.基本语法规则
1.变量
BOOL 布尔型 值为TRUE(1)或FALSE(0)
CHAR 字符型 一字节长的(8bit)的字符
HWND 窗口句柄 用来存放窗口句柄
INT 整型 两字节长的整数
LIST 列表型 指向InstallShield列表,用ListCreate和ListDestroy
LONG 扩展数值型
LPSTR 扩展指针
NUMBER 数值型 存放四字节长的数值,范围从-2147483648到+2147483647
POINTER 指针型
SHORT 短数值型
STRING 字符串型 十分类似VC中的LPCTSTR
 变量如同标准的C语言,在使用前需要事先声名。变量通常在两个位置进行声名,一是主程序外部,这样的变量为全局变量,二是各函数的变量声名区,这样的变量是局部变量。

 2.操作符 
 一般的与C语言相同操作符,在这里不做详解,以下主要介绍比较特殊的操作符, 
 (1) + , - , * , / 
 以上四个操作符与C语言中意义和用法都相同。 

 (2) && 
 与操作,与C语言中用法相同,例:x1 && x2 

 (3) || 
 或操作,与C语言中用法相同,例:x1 || x2 

 (4) ! 
 非操作,与C语言中用法相同,例:!x1 

 (5) * 
 指针操作,类似C语言中的* 

 (6) & , | , ^ , ~ , << , >> 
 分别为位与,位或,按位异或,按位取反,左移和右移,其意义和用法都与C语言中基本相同。 

 (7) . 
 该操作符用于结构,用来得到结构的子项,与Delphi的 . 用法类似,例如: 
 typedef SETTINGSREC 
 begin 
 BOOL bSwitchOn; 
 STRING szMssg[255]; 
 INT nVal; 

 end; 
 SETTINGSREC settings; 

 program 
 settings.bSwitchOn = FALSE; 
 settings.szMssg = "Off"; 
 settings.nVal = 0; 
 (8) = 
 既可作为赋值号,同时也做等于符,例如: 
 str1 = "String"; 
 if str1="String" then 
 endif; 

 (9) & 
 取地址符,与C语言用法类似。 

 (10) < , > , = , <= , >= , != 
 分别表示小于,大于,等于,小于等于,大于等于,不等于 

 (11) + , ^ , % 
 用于字符串的操作。 

 (12) -> 
 结构指针,与C语言中用法类似。 

 (13) @ 
 用于得到Resource窗口中定义的字符串,例: 
 szReferenceFile = svDir ^ @PRODUCT_KEY; 

 3.函数 
 InstallShield的函数使用前同样需要声名,函数的参数传递方式十分类似C语言,例如下面的函数声名: 
 prototype HandleMoveDataError( NUMBER ); 

该声名中函数名为HandleMoveDataError,传递一个NUMBER类型的参数。调用该函数时也基本与C语言中相同。 
 函数体的标准格式为: 
function functionname(nResult) 
// 函数变量声名区 
begin 
// 程序区 
end; 
通常的函数返回一个NUMBER型的数。 

 4.主程序结构 
 主程序以program开始,以endprogram结尾, 

二.框架程序的基本结构 
 程序开始为函数与变量的声明区 
 通过向导建立的框架程序包含以下一些主函数: 
 prototype ShowDialogs(); 
 // 显示安装向导对话框 

 prototype MoveFileData(); 
 // 移动文件数据 

 prototype HandleMoveDataError( NUMBER ); 
 // 移动数据出错处理 

 prototype ProcessBeforeDataMove(); 
 // 移动文件数据前的处理 

 prototype ProcessAfterDataMove(); 
 // 移动文件数据后的处理 

 prototype SetupRegistry(); 
 // 安装注册,用户可在此加入一些代码,通常用于对注册表的操作 

 prototype SetupFolders(); 
 // 安装生成快捷方式,通常用户可在此加入生成快捷方式的代码 

 prototype CleanUpInstall(); 
 // 安装完成后清除临时文件 

 prototype SetupInstall(); 
 // 安装的实际过程 

 prototype SetupScreen(); 
 // 设置安装过程的屏幕显示(包括背景颜色,字体等) 

 prototype CheckRequirements(); 
 // 检查安装需求(包括硬盘空间,操作系统平台等) 

 prototype DialogShowSdWelcome(); 
 // 显示“欢迎”对话框窗口 

 prototype DialogShowSdLicense(); 
 // 显示许可信息的对话框 

 prototype DialogShowSdRegisterUserEx(); 
 // 显示用户安装注册的对话框 

 prototype DialogShowSdAskDestPath(); 
 // 显示“安装路径选择”对话框 

 prototype DialogShowSdSetupType(); 
 // 显示“安装类型选择”对话框 

 prototype DialogShowSdComponentDialog2(); 
 // 当用户选择“定制”安装时,用于显示供用户选择的组件的对话框 

 prototype DialogShowSdSelectFolder(); 
 // 显示快捷方式文件夹选择的对话框 

 prototype DialogShowSdFinishReboot(); 
 // 显示“安装完成重启动”对话框 

编程实例: 
1.怎样在进度条左上角显示当前安装的文件 
 在function SetupScreen()中加入以下语句 
 Enable( INDVFILESTATUS ); 

2.怎样改变窗口背景色 
 SetColor( BACKGROUND, **** )函数可以改变窗口背景色,在适当的位置加上它即可,其中第二个变量可 以为以下值: 
 BK_BLUE BK_MAGENTA BK_PINK BK_YELLOW 
 BK_GREEN BK_ORANGE BK_RED 
 以上几种为渐变色 
 BK_SOLIDBLACK BK_SOLIDMAGENTA BK_SOLIDRED 
 BK_SOLIDBLUE BK_SOLIDORANGE BK_SOLIDWHITE 
 BK_SOLIDGREEN BK_SOLIDPINK BK_SOLIDYELLOW 
 同时第二个参数也可以用RGB来描述,如SetColor( BACKGROUND, RGB(0,0,255) ) 

3.怎样在InstallShield5.0以下版本建立快捷方式 
 在InstallShield5.1以上版本可以可以在Resource窗口中建立,而在以前的版本必须用程序解决该问题, 如果现在有一文件RegPad.exe(安装路径为用户选定的),给该程序在“开始”->“程序”中加一个快捷 方式,具体实现程序如下: 
 function SetupFolders() 
 NUMBER nResult; 
 STRING svResult,szCommand; 
 STRING szName; 

 begin 
 szName = "RegPad.exe"; 
 szCommand = TARGETDIR ^ szName ; 
 LongPathToQuote ( szCommand , TRUE ); 
 AddFolderIcon ( FOLDER_PROGRAMS ^"RegPad1.0Beta","RegPad" , 
 szCommand , TARGETDIR , "" , 0 , "" , REPLACE ); 

4.怎样控制用户序列号 
 在向导生成的框架程序中,定义了一个STRING型的全局变量svSerial,在SdRegisterUserEx()结束时将给 该值赋上用户输入的序列号,你对该变量进行判断即可。 

5.怎样控制重新启动计算机 
 只需加入以下语句 
 System ( SYS_BOOTWIN ); 

6.怎样给Autoexec.bat或Config.sys加入语句 
 以下程序给Autoexec.bat加入一行语句 
 OpenFileMode ( FILE_MODE_APPEND ); 
 OpenFile (nvFileHandle, "C:\\", "Autoexec.bat"); 
 WriteLine ( nvFileHandle , "SET PATH=%PATH%;C:\\ORAWIN95\\BIN" ); 

7.怎样在安装结束时允许用户选择是否打开Readme文件 
 假定Readme.txt文件已经复制到目标路径,以下程序将显示一个复选框,如果用户选择了,则用记事本打 开Readme.txt。 
 function DialogShowSdFinishReboot() 
 NUMBER nResult, nDefOptions; 
 STRING szTitle, szMsg1, szMsg2, szOption1, szOption2,szPathls;
 NUMBER bOpt1, bOpt2; 

 begin 
 if (!BATCH_INSTALL) then 
 bOpt1 = TRUE; 
 bOpt2 = FALSE; 
 szMsg1 = ""; 
 szMsg2 = ""; 
 szOption1 = "阅读Readme文件"; 
 szOption2 = ""; 
 nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 ); 

 if bOpt1 = TRUE then 
 CopyFile ( "Readme.txt" , "Readme.txt" ); 
 LaunchApp ( WINDIR^"Notepad.exe" , TARGETDIR^"Readme.txt" ); 
 endif; 

 return 0; 
 endif; 
 .......... 

8.如何指定默认路径 
 在function SetupInstall()中修改以下代码,如默认目录改为C:\JttMis,见以下修改的代码 
 if (bIs32BitSetup) then 
 svDir = WINDISK ^ "Jttmis"; 
 else 
 svDir = WINDISK ^ "Jttmis"; // use short names 
 endif; 

 TARGETDIR = svDir;

GetProfString()函数是系统函数,用于读取ini文件中的信息

//第一个参数指定文件所在路径

//第二个参数指定section名

//第三个参数指定keyword名

//最后一个参数用于 返回 前面指定的keyword的值。注意:是返回!

//ReplaceProfString()函数是系统函数,用于修改ini文件中keyword的值

//第一个参数指定文件所在路径

//第二个参数指定section名

//第三个参数指定keyword名

//第四个参数指定keyword原值

//第五个参数指定keyword的新值

//只有前面4个条件完全匹配时,原值才会被第五个参数中的新值替换

ReplaceProfString (DB_Dir + "my.ini", "mysqld", "basedir", "/"" + DB_Dir + "/"", "/"" + ReplaceStr(DB_Dir) + "/"");

ReplaceProfString (DB_Dir + "my.ini", "mysqld", "datadir", "/"" + DB_Dir + "Data/"", "/"" + ReplaceStr(DB_Dir + "Data") + "/"");

//执行批处理