installShield_script学习
20180125
script的结构
包括声明和函数块。声明可以在函数声明之前或者在函数语句和begin语句之间出现。
声明
每一个脚本都以全局数据声明为开始。此处定义常量(类似于C语言中的宏定义),声明每一个全局变量以及即将使用的用户定义的函数。
// Constant definitions#define PRODUCT "InstallShield"#define LIMIT 100// Variable declarationsCHAR cVal;NUMBER nVal;STRING szName; // Function declarationsprototype DisplayMsg (NUMBER, STRING);prototype GetName (BYREF STRING);
函数块
以prototype语句生命过的所有函数必须在函数块中定义,在
endprogram
关键字之后其他的全局数据声明可以在功能块中,在endprogram语句和第一个函数声明之间或者在函数声明之间进行。 但是,在功能块中声明的数据仅对数据声明后定义的函数可见。
语法符号规则
分号结尾;
define and #include 不需要分号结尾;
关键字诸如program, endprogram, 和begin 等被置于单独行,不需要标点符号;
函数起始行不需要标点符号;
标签诸如start: 或者startthere: 以冒号结尾。(目前还没搞懂这里)
在括号内包含参数列表。用逗号分隔多个参数。
注释
和C语言一样
空格
InstallScript 不识别空白字符(spaces and tabs, carriage returns)
匈牙利命名法
For example, iPointSize denotes an integer variable, while szFileName indicates
a string variable.变量参数命名:第一个字母代表参数类型,v代表必须是变量,不能是常数:szPath可以是字符串常量,而svDir必须是字符串变量。
详见下表:
前缀表:
Prefix | Data Type | When Used in Function Syntax |
---|---|---|
b | Boolean (BOOL) | Boolean constant, literal, or variable. |
bv | Boolean (BOOL) | Boolean variable only. Constants and literals not allowed. |
c | Character (CHAR) | Character constant, literal, or variable. |
const | Constant | Constant or literal. Variables not allowed. |
h | Handle (HWND) | Handle variable. |
i | Integer (INT) | Integer constant, literal, or variable. |
l | Long integer (LONG) | Long integer constant, literal, or variable. |
lv | Long integer (LONG) | Long integer variable only. Constants and literals not allowed. |
list | List (LIST) | List variable. |
n | Number (NUMBER) | Number constant, literal, or variable. |
nv | Number (NUMBER) | Number variable only. Constants and literals not allowed. |
p | Pointer (POINTER) | Pointer variable. |
pstruct | Pointer to a defined structure type | Not used. |
s | Short integer (SHORT) | Short integer constant, literal, or variable. |
sz | String (STRING) | String constant, literal, or variable. |
sv | String (STRING) | String variable only. Constants and literals not allowed. |
struct | Defined structure type | Not used. |
- 转义字符
Escape Sequence | Performs the Following Action |
---|---|
\n | Inserts a line feed. |
\’ | Inserts a single quotation mark in the string. |
\” | Inserts a double quotation mark in the string. |
\r | Inserts a carriage return only. Does not insert a line feed. |
\t | Inserts a tab character. |
\ooo | Indicates an ASCII character—not an integer—in octal notation. |
\ | Inserts a backslash. |
- if语句
c
if (condition) then
// statements to be executed if condition is true
endif;
c
if (FunctionA (ParameterOne) < 0) then
// Statements to handle the failure
else
// Statements when the function succeeds
endif;
while语句
nCount = 1; while (nCount < 5) MessageBox ("This is still true.", INFORMATION); nCount = nCount + 1; endwhile;
for…endfor
for j = 20 downto 10 step 5MessageBox ("This appears three times.", INFORMATION);endfor;
for iCount = 1 to 10MessageBox ("This appears ten times.", INFORMATION);endfor;
for j = 20 downto 10 step 5MessageBox ("This appears three times.", INFORMATION);endfor;
数据类型
有的数据类型支持大小写,举例:
binary
BINARYchar
CHARint
INT函数
InstallShield 支持三种函数:
Function Type | Description |
---|---|
Built-in functions | Functions supplied by InstallShield or included for Sd dialogs. |
User-defined functions | Functions that you create. |
DLL-called functions | Functions that you can call in a DLL. |
重点关注一下dll中的函数调用,dll可以有很大的灵活性。
使用内置函数
可以在Built-In Functions by Category找到适合需求的函数。
minor upgrade制作
只需要修改product version就可以了;
major upgrade制作
1、版本(major.minor.build.revision)增加(不包括revision)。
2、UpgradeCode不变。
3、ProductCode改变。接收版本号信息
IS_MAJOR_UPGRADE is an msi property so first you have to fetch it using MsiGetProperty. If that function returns anything, the property is set and it’s a major upgrade
STRING szPropertyValue; NUMBER nSize; <hr />nBufferSize=256; MsiGetProperty(ISMSI_HANDLE, "IS_MINOR_UPGRADE", svIsMinorUpgrade,nBufferSize); nBufferSize=256; MsiGetProperty(ISMSI_HANDLE, "IS_MAJOR_UPGRADE", svIsMajorUpgrade,nBufferSize);SprintfBox (INFORMATION, "This Works!", "This Installer may be a Minor upgrade - %s",svIsMinorUpgrade);SprintfBox (INFORMATION, "This Works!", "This Installer may be a Major upgrade - %s",svIsMajorUpgrade);
或者严谨一点,
nResult = MsiGetProperty ( ISMSI_HANDLE , "IS_MAJOR_UPGRADE" , sUpgrade, nvBufferSize ); if nResult = ERROR_SUCCESS then MessageBox(" update detected ", INFORMATION); MessageBox( sUpgrade, INFORMATION); else MessageBox(" Not an Update ", INFORMATION); endif;
若需要在Disk中添加新文件或者文件夹,在Supported Files|Advanced Files|Disk中添加。
installShield_script学习相关推荐
- java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】
类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...
- Java EE学习心得
–Java EE学习心得 1. 称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...
- FastAI 2019课程学习笔记 lesson 2:自行获取数据并创建分类器
文章目录 数据获取 google_images_download 的安装和使用 挂载google 个人硬盘到Google colab中 删除不能打开文件 创建ImageDataBunch 训练模型 解 ...
- FastAI 课程学习笔记 lesson 1:宠物图片分类
文章目录 代码解析 神奇的"%" 导入fastAI 库 下载解压数据集 untar_data 获取帮助文档 help() ? ?? doc 设置路径 get_image_files ...
- 深度学习学习指南-工具篇
colab Colab是由Google提供的云计算服务,通过它可以让开发者很方便的使用google的免费资源(CPU.GPU.TPU)来训练自己的模型. 学习经验总结 如何使用命令行? 通过!+cmd ...
- Redis学习之路(一)--下载安装redis
redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...
- python内置库之学习configparser库(一)
python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...
- 前端Vue学习之路(二)-Vue-router路由
Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...
- 前端Vue学习之路(一)-初识Vue
Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...
- 如何学习数据挖掘和数据科学的7个步骤
前言 概括 1 学习语言 2 工具:数据挖掘,数据科学和可视化软件 3 教科书 4 教育:网络研讨会,课程,证书和学位 5 数据 6 比赛 7 互动:会议,团体和社交网络 more 前言 最近一直一再 ...
最新文章
- pytroch 数据集 datasets DataLoader示例
- 企业日常选择网站制作公司大多从这三方面着手
- UISegmentedControl的详细使用
- [网络安全自学篇] 五十五.Windows系统安全之构建ROP链绕过DEP及原理详解
- Html图片懒加载动画,Intersection Observer实现滚动到相应区域执行动画及图片懒加载...
- EXCEL解析之终极方法WorkbookFactory
- 【LeetCode】剑指 Offer 59 - II. 队列的最大值
- c#中dateTimePicker怎么获取当前的日期
- spring 相关框架面试题
- 新建oracle数据库 环境查询,Oracle单实例数据库迁移到Oracle RAC 环境之(2)--实施篇...
- 1、JavaScript 函数,2、JavaScript 正则表达式,3、JavaScript JSON,
- thinkphp5.x之Collection(集合)解析 php集合
- django传递临时数据
- [转载] 实现宿主机和VirtualBox下虚拟机ping相通教程
- 【渗透测试常见漏洞概述及修复方法】
- 微信云控的好处及云控与群控的差别,后续讨论微信不死号
- echarts堆叠柱状图上显示数字_echarts堆叠柱状图在柱子上方显示总数
- blender建模小试
- Ubuntu18.04运行QQ音乐
- java-获取电池电量
热门文章
- 简单的一个百度注册界面
- 致敬科比,实现查询科比每赛季数据的Web服务器
- 华为智慧屏和荣耀智慧屏究竟有什么区别?
- 基于EasyX图形库的天天爱消除
- Spring使用标签aop:aspectj-autoproxy 出的一些错
- matlab结构力学仿真,MATLAB在结构力学分析中应用.doc
- 笔记1-P2P后台管理系统
- 七夕表白代码(动画爱心)
- 大立公告:红外焦平面阵将以新的面貌出现
- oracle的sql硬解析和软解析,[ORACLE]oracle SQL执行过程 软解析(soft prase)硬解析(hard prase)以及 Soft Soft Parse...