InstallShield脚本语言的编写参考

 

转自http://www.bangchui.net/viewthread.php?tid=75&extra=page%3D2

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 , "SETPATH=%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 shortnames
    endif;
   
    TARGETDIR = svDir;

你可能感兴趣的:(Install)