InstallShield 脚本语言学习笔记
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 脚本语言学习笔记的更多相关文章
- JavaScript--基于对象的脚本语言学习笔记(一)
1.两种嵌入js的方式 使用javascript前缀构建url:<a href="javascript:alert('执行JavaScript. .')">执行j ...
- JavaScript--基于对象的脚本语言学习笔记(三)
事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv=&q ...
- Bash脚本编程学习笔记08:函数
官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
随机推荐
- CoreCLR源码探索(一) Object是什么
.Net程序员们每天都在和Object在打交道 如果你问一个.Net程序员什么是Object,他可能会信誓旦旦的告诉你"Object还不简单吗,就是所有类型的基类" 这个答案是对的 ...
- ABP文档 - 后台作业和工作者
文档目录 本节内容: 简介 后台作业 关于作业持久化 创建一个后台作业 在队列里添加一个新作业 默认的后台作业管理器 后台作业存储 配置 禁用作业执行 Hangfire 集成 后台工作者 创建一个后台 ...
- 自定义Inspector检视面板
Unity中的Inspector面板可以显示的属性包括以下两类:(1)C#以及Unity提供的基础类型:(2)自定义类型,并使用[System.Serializable]关键字序列化,比如: [Sys ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- JAVA程序员常用软件整理下载
********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...
- [转载]强制不使用“兼容性视图”的HTML代码
在IE8浏览器以后版本,都有一个"兼容性视图",让不少新技术无法使用.那么如何禁止浏览器自动选择"兼容性视图",强制IE以最高级别的可用模式显示内容呢?下面就介 ...
- VC中的MFC到底是什么?
1. 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- MyBatis3.2从入门到精通第一章
第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...