20180125
script的结构
包括声明和函数块。声明可以在函数声明之前或者在函数语句和begin语句之间出现。
声明
每一个脚本都以全局数据声明为开始。此处定义常量(类似于C语言中的宏定义),声明每一个全局变量以及即将使用的用户定义的函数。
// Constant definitions #define PRODUCT "InstallShield" #define LIMIT 100 // Variable declarations CHAR cVal; NUMBER nVal; STRING szName; // Function declarations prototype 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 5 MessageBox ("This appears three times.", INFORMATION); endfor;for iCount = 1 to 10 MessageBox ("This appears ten times.", INFORMATION); endfor;for j = 20 downto 10 step 5 MessageBox ("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脚本的结构,包括声明和函数块的使用,以及语法符号规则。详细讲解了变量参数命名的匈牙利命名法,并列举了数据类型。还探讨了InstallShield中的函数调用,特别是dll函数。最后,提到了minor和major upgrade的制作方法,以及如何在升级过程中获取版本信息。
199

被折叠的 条评论
为什么被折叠?



