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") + "/"");

//执行批处理

InstallShield 脚本语言学习笔记的更多相关文章

  1. JavaScript--基于对象的脚本语言学习笔记(一)

    1.两种嵌入js的方式    使用javascript前缀构建url:<a href="javascript:alert('执行JavaScript. .')">执行j ...

  2. JavaScript--基于对象的脚本语言学习笔记(三)

    事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv=&q ...

  3. Bash脚本编程学习笔记08:函数

    官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...

  4. Bash脚本编程学习笔记07:循环结构体

    本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...

  5. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  6. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  7. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  8. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  9. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

随机推荐

  1. accept_mutex与性能的关系 (nginx)

    注:运行环境CentOS 6+   背景      在对启动了20个worker的nginx进行压力测试的时候发现:如果把配置文件中event配置块中的accept_mutex开关打开(1.11.3版 ...

  2. LeetCode: 3Sum

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  3. Hyper-V3:虚拟机的配置

    在Hyper-V成功新建一台虚拟机,在正式使用之前,必须配置VM使用的硬件资源,并授予用户访问VM的权限等,本文罗列出一些常见的配置,供读者参阅. 一,为虚拟机分配使用的内存 在Hyper-V Man ...

  4. [内核笔记1]内核文件结构与缓存——inode和对应描述

    由来:公司内部外网记录日志的方式现在都是通过Nginx模块收到数据发送到系统消息队列,然后由另外一个进程来从消息队列读取然后写回磁盘这样的操作,尽量的减少Nginx的阻塞. 但是由于System/V消 ...

  5. Could not evaluate expression

    VS15 调试变量不能显示值,提示:Could not evaluate expression 解决办法: 选择"在调试时显示运行以单击编辑器中的按钮"重启VS即可. 可参考:Vi ...

  6. javascript动画系列第二篇——磁性吸附

    × 目录 [1]范围限定 [2]拖拽范围 [3]磁性吸附 前面的话 上一篇,我们介绍了元素拖拽的实现.但在实际应用中,常常需要为拖拽的元素限定范围.而通过限定范围,再增加一些辅助的措施,就可以实现磁性 ...

  7. JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  8. python之类介绍

    python对象销毁(垃圾回收): 1>同Java语言一样,python使用了引用计数这一简单计数来追踪内存中的对象,也就是说,python内部记录着所有使用中的对象各有多少引用,一个内部跟踪变 ...

  9. 2DToolkit官方文档中文版打地鼠教程(一):初始设置

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  10. EQueue文件持久化消息关键点设计思路

    要持久化的关键数据有三种 消息: 队列,队列中存放的是消息索引信息,即消息在文件中的物理位置(messageOffset)和在队列中的逻辑位置(queueOffset)的映射信息: 队列消费进度,表示 ...