19 批处理函数
19.1 高级批处理文件函数
高级批处理文件函数和Ez批处理文件函数不同,它们提供更大的灵活性和对批处理文件的更多控制。当需要对一个批处理文件做更多扩充和更复杂的修改,则使用这些函数。
为用这些高级函数来编辑一个批处理文件,你必须首先通过调用BatchFileLoad把该文件装入到内存。当完成了对该批处理文件的修改,然后必须调用BatchFileSave保存该文件。
安装初始化时,它选择目标系统的启动批处理文件(Autoexec.bat)作为缺省批处理文件(除非通过调用BatchSetFileName来修改),如果没有指定其它文件名,该文件就是由BatchFileLoad读入内存的文件。为确定缺省批处理文件的全限定名,调用BatchGetFileName。
不要把Ez配置文件函数和高级配置文件函数混合起来。调用BatchFileLoad之后,直到你调用了BatchFileSave保存你的修改后,你才能使用Ez配置文件函数。
BatchAdd
添加一个环境变量到一个批处理文件。
BatchDeleteEx
删除批处理文件中的一行。
BatchFileLoad
把一个批处理文件装入内存来用高级批处理函数编辑它。
BatchFileSave
保存一个由BatchFileLoad装入的批处理文件。
BatchFind
在一个批处理文件中查找项目。
BatchGetFileName
检索缺省批处理文件的全限定名。
BatchMoveEx
移动一个批处理文件中的一个项目。
BatchSetFileName
指定作为缺省批处理文件的一个批处理文件。
相关函数:
SdShowFileMods
19.1.1 BatchAdd
语法:BatchAdd (szKey, szValue, szRefKey, nOptions);
说明:BatchAdd函数插入一个SET命令或其它DOS命令到一个已经由BatchFileLoad装入内存的批处理文件中。参数nOptions使你可以将新命令添加到文件的第一个或最后一个语句,用新命令取代一个现存语句,或指定将新命令添加到一个现存语句的前面或后面。
除非你将常量COMMAND和你传递给nOptions的值用或操作符连接,否则BatchAdd自动在你要插入的语句的开始添加DOS关键字SET。如果你没有在nOptions显式指定REPLACE,那么即使在批处理文件中存在重复行,指定的语句也会被添加。
调用BatchAdd前,你必须调用BatchFileLoad来把要修改的文件装入内存。在你修改该文件后,调用BatchFileSave来把它保存到磁盘。
参数:
szKey
指定要添加到批处理文件中的关键字。PATH、 TEMP和 MYENV是该参数有效值的例子。
szValue
指定要添加到该批处理文件中的关键字的值。该字符串必须不长于512个字节;传递一个长于512字节的字符串将会引起一个安装错误。为添加一个更长的字符串,使用FileGrep 和 FileInsertLine函数。
批处理文件完全不支持长路径名。如果你使用该函数来添加包含长路径名的一行,则必需先调用LongPathToShortPath把长路径名转换成它等价的短路径,然后再能把它插入到要添加至批处理文件的字符串中。
szRefKey
指定在批处理文件中与你添加的szKey相关的参考项。
nOptions
指定该行被插入到文件何处。在该参数位置传递下列预定义常量之一:
BEFORE:该语句被添加到包含szRefKey的第一行的前面。如果szRefKey是一个空字符串(“”),该语句被添加到文件首行。
AFTER:该语句被添加到包含szRefKey的最后一行的后面。如果szRefKey是一个空字符串(“”),该语句被添加到文件末行。
REPLACE:该语句将置换文件中已存在的一行。如果存在多行有相同的字,仅最后一行被置换。如果szKey不存在于文件中,新行添加到szRefKey之后。如果szRefKey是一个空字符串(“”),该语句被添加到文件末行。
当被添加的语句不是一个SET命令,给szKey传递一个空字符串,给szValue传递完整命令,并将常量COMMAND和其它选项之一用或操作符(|)连接,如下所示:
BatchAdd("", "PAUSE", "", COMMAND | AFTER);
返回值:
0:BatchAdd成功添加一个SET语句或其它命令到批处理文件。
< 0:BatchAdd未能添加一个SET语句或其它命令到批处理文件。
注解:
·一个InstallShield参考项可以是一个环境变量,DOS命令或一个程序文件名。环境变量是关键字,如PATH, COMSPEC, LIB或其它预定义或用户定义的标识符。一个环境变量的值使用DOS SET命令来设置。显示在一个批处理文件中的语句必须是DOS命令,程序名(有或没有命令行参数)或注解。有关命令和环境变量的详细定义请参阅操作系统手册。
19.1.2 BatchDeleteEx
语法:BatchDeleteEx (szKey, nOptions);
说明:BatchDeleteEx函数删除一个批处理文件中包含szKey指定的值的行。调用BatchDeleteEx前,你必须调用BatchFileLoad来把要修改的文件装入内存。在你修改该文件后,调用BatchFileSave来把它保存到磁盘。
参数:
szKey
指定标识要被删除的行的参考关键字。
nOptions
表明szKey是指定一个SET语句中的一个环境变量还是一个命令。在该参数位置传递下列预定义常量之一:
0:指定szKey是一个SET语句中的一个环境变量。一个环境变量是一个预定义的标识符(如PATH, COMSPEC和 LIB),或一个用户定义的标识符。例如,如果szKey的值是"LIBPATH"并且nOptions设置为0,则下面语句将被删除:
SET LIBPATH=C:\Lang\Lib
COMMAND:指定szKey是一个DOS命令或一个程序文件名。
返回值:
0:BatchDeleteEx成功删除包含指定值的行。
< 0:BatchDeleteEx未能删除包含指定值的行。
19.1.3 BatchFileLoad
语法:BatchFileLoad (szBatchFile);
说明:BatchFileLoad函数将指定批处理文件的一份拷贝装入内存以便其它高级批处理文件函数可以被调用来操作该文件。在szBatchFile指定你要编辑的批处理文件名或给szBatchFile传递一个空字符串来编辑缺省批处理文件,它由InstallShield初始化设置为由系统使用的Autoexec.bat。
注意你可以调用BatchFileLoad来创建一个新批处理文件。为了这么做,你可以给szBatchFile传递一个不存在的文件名。然后调用其它批处理函数来编辑新文件。最后,调用BatchFileSave将新文件保存到磁盘。
使用任何高级批处理文件函数之前,你必须首先调用BatchFileLoad将要修改的文件装入到内存。在你修改文件后,调用BatchFileSave将它保存到磁盘。为得到将安装脚本中使用的缺省批处理文件的全限定名,调用BatchGetFileName。为指定另一个在安装脚本中使用的缺省批处理文件,调用BatchSetFileName。
参数:
szBatchFile
指定装入内存的批处理文件的全限定名。为装入缺省批处理文件,给该参数传递一个空字符串(“”)。如果你在该参数指定一个文件,该文件成为缺省批处理文件。调用该函数后,你可以使用所有高级批处理文件函数来操作该文件。
返回值:
0:BatchFileLoad成功将指定批处理文件装入内存。
< 0:BatchFileLoad未能将指定批处理文件装入内存。
19.1.4 BatchFileSave
语法:BatchFileSave (szBackupFile);
说明:BatchFileSave函数将由BatchFileLoad函数装入内存的批处理文件保存到磁盘。文件保存为它的原始名。如果在szBackupFile指定一个文件名,在被编辑的文件被写到磁盘前原始文件用该文件名更名。如果szBackupFile包含一个空字符串(“”),原始文件被该修改的文件置换。如果你结束用高级批处理文件函数修改一个批处理文件时没有调用BatchFileSave,所有修改将被丢失。
参数:
szBackupFile
指定在编辑被保存前是否要有一个原始文件拷贝的备份。
如果无需创建备份文件,给该参数指定一个空字符串。
如果原始文件必须用一个特定名备份,给该参数传递该文件名。该文件名必须是非限定的(也就是,不限定一个驱动器和/或路径)。注意如果具有指定名称的文件已经存在, BatchFileSave将生成一个唯一的文件扩展名,如接下去布告牌项目中描述。
如果原始文件备份时必须带有一个安装生成文件的扩展名,指定通配符””作为文件扩展名(例如,”Batch.”)。然后安装将赋一个数值型值,从001开始,作为扩展名。如果一个有该扩展名的文件已经存在,扩展名值将增加1直到产生一个唯一的文件名。
一旦创建了备份,InstallShield保存备份文件名到系统变量INFOFILENAME。
注意下列重要事实:1)如果上一次对BatchFileLoad的调用指定的批处理文件不存在,备份文件将和由调用BatchFileSave创建的批处理文件相同。2)如果szBakupFile指定原始批处理文件名,那么将不会创建一个备份文件。
返回值:
0:BatchFileSave成功保存内存中的批处理文件到磁盘。
< 0:BatchFileSave未能保存内存中的批处理文件到磁盘。
19.1.5 BatchFind
语法:BatchFind (szRefKey, svResult, nOptions);
说明:BatchFind函数在一个批处理文件中查找出现szRefKey指定的参考关键字的一处或多处。如果你在nOptions指定常量RESTART,返回参考关键字第一次出现之处。为找到出现szRefKey的下一处,将参数nOptions设置为CONTINUE重复调用该函数。
调用BatchFind前,你必须调用BatchFileLoad来把要修改的文件装入内存。在你修改该文件后,调用BatchFileSave来把它保存到磁盘。
参数:
szRefKey
指定要查找的参考关键字。参考关键字可以是一个环境变量,一个DOS命令或一个程序名。如果参考关键字是一个文件名并且你没有指定一个文件扩展名,函数将返回所有有该基名的关键字。例如,如果你指定Win.com,查找仅对该参考关键字。如果你指定WIN,Win.exe文件,Win.dll文件,Win.sys文件等等如故存在于批处理文件中,则都将被返回。
svResult
指定在批处理文件中找到的关键字的值。
nOptions
指定从哪儿开始查找;在该参数位置传递下列预定义常量之一:
CONTINUE:从批处理文件当前位置开始查找。
RESTART:从批处理文件开始来开始查找。
当你查找的参考关键字是一个DOS命令或程序名(而不是一个环境变量)时,将常量COMMAND和CONTINUE或RESTART用或操作符(|)连接,如下所示:
BatchFind ("SCAN.EXE", svResult, COMMAND | RESTART);
返回值:
0:BatchFind成功找到szRefKey的值并在szResult返回它。
< 0:BatchFind未能找到szRefKey的值并在szResult返回它。
19.1.6 BatchGetFileName
语法:BatchGetFileName (svFileName);
说明:BatchGetFileName函数检索缺省批处理文件(由InstallShield初始设置为系统启动时使用的自举Autoexe.bat文件)的全限定名。为指定一个不同的批处理文件为安装脚本中使用的缺省批处理文件,调用BatchSetFileName。
参数:
svFileName
在szFileName返回缺省批处理文件的全限定名。
返回值:
0:BatchGetFileName成功检索缺省批处理文件的全限定名。
< 0:BatchGetFileName未能检索缺省批处理文件的全限定名。
19.1.7 BatchMoveEx
语法:BatchMoveEx (szMove, szRefKey, nOptions, nMoveOption);
说明:BatchMoveEx函数将一个批处理文件中由szMove指定的行从一个位置移动至另一个位置。参数nOptions指定是把该行放置在批处理文件的开始或结尾,还是在szRefKey指定的行的前面或后面。调用BatchMoveEx前,你必须调用BatchFileLoad来把要修改的文件装入内存。在你修改该文件后,调用BatchFileSave来把它保存到磁盘。
参数:
szMove
指定标识要被移动行的参考关键字。
szRefKey
指定关键字,它标识用来定位移动行的参考行。如果szRefKey是一个空字符串,由szMove 指定的行移动到文件的开始或结尾,根据nOptions的值而定。
nOptions
指定将行移动到何处;给该参数传递下列预定义常量之一:
BEFORE:由szMove指定的行被移动到包含szRefKey参考关键字的行的前面。如果szRefKey是一个空字符串,则由szMove指定的行被移动到文件的开始。
AFTER:由szMove指定的行被移动到包含szRefKey参考关键字的行的后面。如果szRefKey是一个空字符串,则由szMove指定的行被移动到文件的结尾。
当你查找的参考关键字是一个DOS命令或程序名(而不是一个环境变量)时,将常量COMMAND和BEFORE 或AFTER用或操作符(|)连接,如下所示:
BatchMoveEx ("PATH", "SCAN.EXE", BEFORE | COMMAND, 0);
nMoveOption
指定szMove是一个命令还是一个环境变量。给该参数传递下列预定义常量之一:
0:指定szMove是一个环境变量。
COMMAND:指定szMove是一个命令。
返回值:
0:BatchMoveEx成功移动批处理文件中的指定行。
< 0:BatchMoveEx未能移动批处理文件中的指定行。
19.1.8 BatchSetFileName
语法:BatchSetFileName (szBatchFile);
说明:BatchSetFileName函数指定由Ez批处理文件函数及以一个空字符串为其参数调用BatchFileLoad时所使用的批处理文件名。在安装脚本中,该文件被作为缺省批处理文件。安装初始化过程中,缺省批处理文件被设置为系统使用的Autoexec.bat文件。
应重视下列有关BatchSetFileName的事实:
它不确认指定文件的存在性。
它不把文件装入内存。
参数:
szBatchFile
指定在安装脚本中作为缺省批处理文件使用的文件的全限定名。
返回值:
0:BatchSetFileName成功设置指定文件为缺省批处理文件。
< 0:BatchSetFileName未能设置指定文件为缺省批处理文件。
注解:
BatchSetFileName只简单地指定缺省批处理文件的名称。即使文件名是无效的或指定文件不存在时该函数也会成功。一个无效的文件名将导致随后的Ez批处理文件和高级批处理文件函数失败。
19.2 Ez批处理文件函数
Ez批处理文件函数修改缺省批处理文件。除非通过调用BatchSetFileName来修改,缺省批处理文件是Autoexec.bat。应注意的是每个Ez批处理文件函数打开缺省批处理文件然后在作修改后自动保存它。你使用Ez批处理文件函数时你不用调用函数来打开和保存。
不要把Ez批处理文件函数和高级批处理文件函数混合起来。调用BatchFileLoad之后,直到你调用了BatchFileSave保存文件后,你才能使用Ez批处理文件函数。
EzBatchAddPath
修改缺省批处理文件,通过添加一个路径名到一个PATH命令的查找路径或到一个赋给环境变量的值。
EzBatchAddString
添加一行文本到缺省批处理文件。
EzBatchReplace
置换缺省批处理文件中的一个语句。
19.2.1 EzBatchAddPath
语法:EzBatchAddPath (szKey, szPath, szRefDir, nPosition);
说明:EzBatchAddPath函数修改缺省批处理文件,通过添加一个路径名到一个PATH命令的查找路径或到一个赋给环境变量的值。除非通过调用BatchSetFileName来修改,缺省批处理文件是Autoexec.bat。
调用BatchGetFileName来确定缺省批处理文件的全限定名。为改变EzBatchAddPath使用的批处理文件的文件名,调用BatchSetFileName。该函数不支持长文件名。在把它传递到调用EzBatchAddPath 之前调用LongPathToShortPath来转换长路径到它等价短路径。
参数:
szKey
指定要修改的环境变量名。如,为修改PATH语句,在这儿指定”path”。 如果指定的环境变量没有在缺省批处理文件中找到,则为环境变量创建一个完整SET语句并插入到文件中。
szPath
指定添加到环境变量当前值的路径名。在查找路径中插入一个分界分号来把它和其它路径名分隔开。
szRefDir
指定与你添加的szPath新路径名相关的参考关键字(一个路径名)。如果这是一个空字符串,该路径名添加到查找路径的开始或结尾,根据nPosition的值而定。如果由szRegKey指定的路径名没有在查找路径中找到,szKey的值被添加到结尾。
nPosition
指定在查找路径的何处添加新路径名,具体包括以下选项:
BEFORE:新路径名被插入到szRefDir指定的路径名的前面。如果szRefDir 包含一个空字符串,该路径名被添加到查找路径的前面。
AFTER:新路径名被插入到szRefKey指定的路径名之后。如果szRefDir 包含一个空字符串,该路径名被添加到查找路径的结尾。
返回值:
0:EzBatchAddPath成功添加路径名到批处理文件。
< 0:EzBatchAddPath未能添加路径名到批处理文件。
注解:
·缺省批处理文件是隐藏或只读时EzBatchAddPath 可能失败。
·EzBatchAddPath对它修改的文件不做拷贝备分。
19.2.2 EzBatchAddString
语法:EzBatchAddString (szLine, szRefKey, nOptions);
说明:EzBatchAddString函数添加一文本行到缺省批处理文件;除非通过调用BatchSetFileName来修改,缺省批处理文件是Autoexec.bat。为确定缺省批处理文件的全限定名,调用BatchGetFileName。为修改由EzBatchAddPath使用的批处理文件的名称,调用BatchSetFileName。
参数:
szLine
指定添加到文件中的文本行。除非你在nOptions 指定NOSET,该函数假定szLine是一个环境变量;在szLine被写入到缺省批处理文件中前文本”SET”被插入到字符串的前面。
批处理文件完全不支持长路径名。如果你使用该函数来添加包含长路径名的一行,则必需先调用LongPathToShortPath把长路径名转换成它等价的短路径,然后再能把它插入到要添加至批处理文件的字符串中。
szRefKey
指定和你想要在缺省批处理文件中添加的szLine相关的参考关键字。EzBatchAddString在缺省批处理文件中查找参考关键字和在该行前面或后面放置szLine的内容,根据nOptions 的值。
nOptions
指定使用的选项;在该参数位置传递下列预定义常量之一:
BEFORE:SzLine被添加到包含szRefKey的行之前。如果szRefKey是一个空字符串,szLine被添加到文件的第一行。
AFTER:SzLine被添加到包含szRefKey的行之后。如果szRefKey是一个空字符串,szLine被添加到文件的最后一行。
REPLACE:SzLine置换文件中的一现存行。如果有多行有相同关键字存在,EzBatchAddString仅置换包含该关键字的最后一行。
NOSET:指定文本”SET”不被插入到szLine中的字符串的前面。该常量可以和BEFORE、 AFTER、 和REPLACE用或操作符(|)组合。
当你查找的参考关键字是一个DOS命令或程序名(而不是一个环境变量)时,将常量COMMAND和其它选项常量用或组合,如下所示:
EzBatchAddString (szLine, szRefKey, AFTER | COMMAND);
返回值:
0:EzBatchAddString成功添加文本字符串到一个指定批处理文件。
< 0:EzBatchAddString未能添加文本字符串。
注解:
·EzBatchAddString 在参数szRefKey中查找合适的参考关键字。如,一个环境变量的关键字是该环境变量本身的名称。
·如果缺省批处理文件是隐藏或只读时,EzBatchAddString可能失败。
·EzBatchAddString对它修改的文件不做拷贝备分。
19.2.3 EzBatchReplace
语法:EzBatchReplace (szNewString);
说明:EzBatchReplace函数置换缺省批处理文件中的一个现存行;除非通过调用BatchSetFileName来修改,缺省批处理文件是Autoexec.bat。为确定缺省批处理文件的全限定名,调用BatchGetFileName。为修改由EzBatchAddPath使用的批处理文件的名称,调用BatchSetFileName。
参数:
szNewString
指定置换文件中一现存行的新字符串。
批处理文件完全不支持长路径名。如果你使用该函数来添加包含长路径名的一行,则必需先调用LongPathToShortPath把长路径名转换成它等价的短路径,然后再能把它插入到要添加至批处理文件的字符串中。
返回值:
0:EzBatchReplace成功置换文本行。
< 0:EzBatchReplace未能置换文本行。
注解:
·EzBatchReplace分析szNewString并确定该字符串的关键字。然后它在缺省批处理文件中查找包含相同关键字的一行。该函数置换找到的有相同关键字的最后一行。
·一个批处理文件中的一些常用关键字是PATH、 COMSPEC、TEMP、Smartdrv.exe、Win.com、和Share.exe。
·如果缺省批处理文件是隐藏或只读时,EzBatchReplace函数可能失败。
·EzBatchReplace对它修改的文件不做拷贝备分。
20 卸载函数
下列函数执行卸载安装和/或维护安装一个已安装应用程序的所需服务。
ComponentGetTotalCost
请参阅7.9。
ComponentTransferData
请参阅7.23。
DeinstallSetReference
请参阅15.3。
DeinstallStart
请参阅15.4。
InstallationInfo
请参阅15.5。
MaintenanceStart
请参阅15.6。
RegDBGetItem
请参阅15.13。
RegDBSetItem
请参阅15.19。
21 版本检测函数
下列函数允许你访问存在于Windows 95及更高版本的文件中的版本信息。为使用这些函数,你需要知道有关版本资源的背景信息。查阅Microsoft Windows Programmer's Reference, Volume 4:资源手册来更好得了解版本资源。函数说明假定你完全熟悉版本资源的概念。
下列函数获得一个具体文件的版本,找到一个文件并得到它的版本,或查找一个存在的文件和试图安装该文件的一个更新的版本。函数可工作于压缩文件或未压缩文件。
VerCompare
比较包含版本信息的两个字符串。
VerFindFileVersion
查找指定文件并检索它的版本和位置。
VerGetFileVersion
检索一指定文件的版本。
VerSearchAndUpdateFile
用一个更新的版本置换一个存在的文件。如果指定的文件不存在,则安装更新的版本。
VerUpdateFile
用一个更新的版本置换一个存在的文件。如果指定的文件不存在,则不安装更新版本。
21.1 VerCompare
语法:VerCompare (szVersionInfo1, szVersionInfo2, nCompareFlag);
说明:VerCompare函数比较两个包含版本信息的字符串。
参数:
szVersionInfo1
以下列格式指定第一个版本字符串:
主版本号.次版本号
如果szVersionInfo1是2.1.2.0,主版本号是2.1,次版本号是2.0。
szVersionInfo2
以相同格式指定第二个版本字符串。
nCompareFlag
传递预定义常量VERSION来指定进行版本号的比较。该参数不允许其它值。
返回值:
EQUALS (2):表明两个字符串有相等值。
GREATER_THAN (0):表明第一个字符串包含的值大于第二个。
LESS_THAN (1):表明第一个字符串包含的值小于第二个。
21.2 VerFindFileVersion
语法:VerFindFileVersion (szFileName, svPath, svVersionNumber);
说明:VerFindFileVersion函数查找一个指定的文件并检索文件版本和位置。VerFindFileVersion使用下列查找算法来找到文件:
1.首先,它查找Windows 文件夹。
2.接着,Windows 系统文件夹。
3.接着,由系统变量TARGETDIR指定的文件夹。
4.接着,由环境变量PATH指定的文件夹。
5.最后, Setup.exe运行所在的文件夹。
有关Windows 系统文件夹的信息,请查看InstallShield系统变量WINSYSDIR的文档。
参数:
szFileName
指定要获得其版本的文件的非限定名。不要在该参数位置指定一个驱动器指示符或路径。
svPath
返回文件所在的文件夹的完整路径(包含驱动器指示符)。
svVersionNumber
返回下列格式的文件版本号:
主版本号.次版本号
如果szVersionNumber返回2.1.2.0,则主版本号是2.1,次版本号是2.0。
返回值:
0:表明函数成功返回版本信息。
FILE_NO_VERSION (-8):表明文件被找到但不包含版本信息。
FILE_NOT_FOUND (-2):表明文件未能找到。
注解:
·当使用VerFindFileVersion时,你可能需要为TARGETDIR设置一个值,而不是让InstallShield自动设置它。因为函数在TARGETDIR文件夹中寻找文件,你可能需要临时设置系统变量来确保VerFindFileVersion会找到该文件。如果你要这么做,在将TARGETDIR的值临时设置为另一个文件夹前使用VarSave来保存该值。
21.3 VerGetFileVersion
语法:VerGetFileVersion (szFileName, svVersionNumber);
说明:VerGetFileVersion函数检索指定文件的数值型版本信息。
参数:
szFileName
指定其数值型版本信息要被检索的文件的全限定名。
svVersionNumber
以下列格式的字符串返回文件数值型版本号信息:
主版本号.次版本号
如果szVersionNumber返回2.1.2.0,则主版本号是2.1,次版本号是2.0。
返回值:
0:表明函数成功返回版本信息。
FILE_NOT_FOUND (-2):表明指定文件未能找到。
FILE_NO_VERSION (-8):表明文件被找到但不包含版本信息。
注解:
·值得注意的是,虽然InstallShield 文件版本信息以字符串格式出现,它们所指示的一个文件的版本信息是数值型版本信息。一个文件的字符串版本信息是不能由InstallShield函数检查到和返回的。而且,你必须注意当Windows 资源管理器显示一个文件的属性时,它显示字符串版本信息,可能与文件数值型版本信息不等。因为这个原因,由VerGetFileVersion在参数svVersionNumber返回的值可能与Windows 资源管理器显示的版本信息不匹配。
·有关文件版本信息的更多情况,可查询Windows SDK或Win32 SDK。
21.4 VerSearchAndUpdateFile
语法:VerSearchAndUpdateFile (szFileName, nUpdateFlag, svInstalledFile);
说明:VerSearchAndUpdateFile函数查找指定的文件并在必要时安装该文件的一个更新版本。如果该函数找到该文件,它比较现存文件的版本号和新文件的版本号。如果现存文件是旧的,它被新文件替换。新文件必须在由系统变量SRCDIR指定的目录中。如果函数未找到一个现存文件,它就拷贝新文件到目标系统。Microsoft Windows根据文件类型决定文件安装在哪里。例如,.dlls和系统驱动器被安装在Windows 系统文件夹中。有关Windows 系统文件夹的信息,请查阅InstallShiled 系统变量WINSYSDIR的文档。
VerSearchAndUpdateFile使用下列查找算法来找到现存文件:
请参阅VerFindFileVersion中的查找算法。
参数:
szFileName
指定要安装的文件的未限定名。不要在该参数位置指定一个驱动器指示符或路径。
nUpdateFlag
指示是否该文件要被无条件更新或仅当在目标系统上找到的文件版本比你现有的文件版本旧时才更新。在该参数位置传递下列预定义常量之一:
VER_UPDATE_COND:仅当现存文件是一个旧版本时才更新它。
VER_UPDATE_ALWAYS:即使现存文件是一个更新的版本也要更新它。
svInstalledFile
返回由该函数安装的文件的全限定名。如果你要置换的文件正在使用,则文件以一个轻微差异的名称被安装到相同目录。文件以其扩展名的第一个字符为~字符来更名。例如,如果你安装文件Shell.dll并且文件是锁定的,则该文件被拷贝为Shell.~ll。文件名从该变量返回。
返回值:
FILE_INSTALLED (0):函数成功安装文件。
FILE_IS_LOCKED (-4):表明文件正在被Windows 使用并且不能被置换。新文件以一个新名字被拷贝到相同目录。
FILE_NO_VERSION (-8):表明文件被找到,但它不包含版本信息。文件更新没有执行。
FILE_RD_ONLY (-5):表明现存文件是写保护的。脚本必须在进行安装之前重新设置目标文件的只读标志,然后再尝试安装文件。
FILE_SRC_OLD (-7):表明要安装的文件有相同的日期或比先前存在的文件更早。
OUT_OF_DISK_SPACE (-6):表明函数因为目标驱动器上磁盘空间不足,未能创建文件。文件更新没有执行。
VER_DLL_NOT_FOUND (-3):表明没有找到Ver.dll。文件更新没有执行。
OTHER_FAILURE (-1):表明发生一个不确定错误。文件更新没有执行。
注解:
·使用VerSearchAndUpdateFile时,你可能需要给SRCDIR和/或TARGETDIR设置值,而不是让InstallShield自动设置它们。因为函数在SRCDIR和 TARGETDIR文件夹中查找文件,你可能需要临时重新设置这些系统变量的值来确保VerSearchAndUpdateFile会找到文件。如果你需要这么做,则在将SRCDIR 和 TARGETDIR临时设置为其它值之前使用VarSave来保存它们的值。调用VerSearchAndUpdateFile函数后,使用VarRestore来重新设置SRCDIR 和TARGETDIR。
·对于文件传输,VerSearchAndUpdateFile的可能的替换函数是XCopyFile,,它可以做版本检测,标记锁定的.dll和.exe文件待系统重启后更新,并且递增共享的.dll和.exe文件的注册表访问计数器。
21.5 VerUpdateFile
语法:VerUpdateFile (szFileName, nUpdateFlag, svInstalledFilePath);
说明:VerUpdateFile函数使用一个指定文件的版本信息来确定是否要在目标系统上安装该文件。VerUpdateFile在参数szFileName位置得到文件名。如果在szFileName没有指定一个全限定名,VerUpdateFile使用下列查找算法来找到该文件(目标文件):
请参阅VerFindFileVersion的查找算法。
VerUpdateFile然后将SRCDIR中相同名称的文件的版本和目标文件(如果存在)的版本进行比较。如果源文件的版本号比目标文件的版本号更新,则目标文件被置换为该源文件。如果目标文件不存在,InstallShield拷贝源文件到目标文件。
当在参数nUpdateFlag位置是SHAREDFILE 或 LOCKEDFILE选项,并且要被更新的.dll或.exe 文件正在被系统使用时,源文件的更名拷贝传输到目标系统并且系统变量BATCH_INSTALL设置为TRUE。然后,当在安装结尾调用RebootDialog或 SdFinishReboot并且系统重启时,锁定文件被更新。有关更新锁定文件的更多信息请查阅RebootDialog 和SdFinishReboot。系统变量BATCH_INSTALL可以被测试来确定是否遇到锁定的.dll或.exe文件。你不能同时使用SHAREDFILE 和 LOCKEDFILE选项,你必须使用一个或另一个。
参数:
szFileName
指定要被更新的文件的全限定名或非限定名。如果该名是非限定的(也就是,如果它不包括一个驱动器指示符或路径),InstallShield查找Windows 或Win95目录,系统目录,由环境变量PATH指定的目录,然后是InstallShield可执行文件的目录来找匹配文件。VerUpdateFile取szFileName的文件名部分,并用它来标识SRCDIR中作为源文件的文件。
nUpdateFlag
指示是否该文件要被无条件更新或仅当在目标系统上找到的文件版本比你的源文件版本早时才更新。在该参数位置传递下列预定义常量之一。你可以用按位或操作符(|)将常量SHAREDFILE和其它常量之一组合。你不可将SHAREDFILE 和 LOCKEDFILE组合。
LOCKEDFILE:使VerUpdateFile标志Windows 或系统重启时要被更新的.dll 和.exe文件。一个锁定文件是一个当InstallShield试图要访问或更新时而正在被一个应用程序或系统使用的文件。LOCKEDFILE选项和 SHAREDFILE一样工作,除了LOCKEDFILE不创建注册表表目或修改注册表访问计数器。你使用SHAREDFILE选项时不能使用LOCKEDFILE选项。有一些非共享文件,对它们脚本作者不要注册表表目和访问计数器。这些文件除非由应用程序本身,否则永不被安装。LOCKEDFILE允许VerUpdateFile处理非共享的锁定文件。
SHAREDFILE:可以通过用VerUpdateFile将所有文件处理为共享,并标志Windows 或系统重启时要被更新的锁定的.dll 和.exe文件,来组合共享和锁定文件的处理。
当文件存在于目标目录并且它有一个大于0的访问计数器时,SHAREDFILE选项使VerUpdateFile处理所有文件为共享文件并将注册表访问计数器加一。如果共享文件不存在于目标目录并且它没有访问计数器时,InstallShield创建该计数器并把它设置为1。如果共享文件已经存在于目标目录但没有访问计数器时,InstallShield创建该计数器并把它初始化为2,作为一个防止安装过程中意外删除的预防措施。
SELFREGISTER
当使用“非批处理方法“安装自注册文件时,立即进行自注册处理。
当你已经调用Enable(SELFREGISTERBATCH),自注册文件排队等待注册。
当使用“批处理方法“安装自注册文件时,一旦调用Do(SELFREGISTRATIONPROCESS),这些文件被注册。
总是将SELFREGISTER和常量SHAREDFILE用按位或操作符组合一起使用。
VER_UPDATE_ALWAYS:更新文件时不考虑版本号。
VER_UPDATE_COND:仅当被替换的文件是旧版本时才更新它。
svInstalledFilePath
返回安装的文件的全限定名。如果你想要置换的文件正在被使用,文件以一个更改名安装到相同目录。InstallShield使用一个~字符来置换文件扩展名的第一个字符。
例如,如果你在更新文件Shell.dll并且目标文件是锁定的,则源文件以Shell.~ll被拷贝到目标目录。文件名从参数svInstalledFilePath返回。
如果SHAREDFILE选项使用到参数nUpdateFlag并且锁定文件当Windows 或系统重启时被正确递交来更新,则发生更新时文件的~更名版本被删除。
返回值:
FILE_INSTALLED (0):表明函数成功安装文件。该常量等于0。所有其它返回值小于0。
FILE_IS_LOCKED (-4):表明现存的文件正被Windows使用,不能被置换。新文件以一个新名被拷贝到相同目录,如前面所述。
FILE_NO_VERSION (-8):表明文件被找到,但它不包含版本信息。不执行文件更新。
FILE_RD_ONLY (-5):表明现存文件是写保护的。你必须在进行安装之前重新设置目标文件的只读位,然后再尝试安装文件。
FILE_SRC_EQUAL (-9):表明你要安装的文件和现存文件有相同版本。如果VER_UPDATE_COND标志被设置,则不执行文件更新。
FILE_SRC_OLD (-7):表明你要安装的文件比现存文件要早。如果VER_UPDATE_COND标志被设置,则不执行文件更新。
OUT_OF_DISK_SPACE (-6):表明函数未能创建文件,因为目标驱动器上磁盘空间不足。不执行文件更新。
-51:一个自注册文件未能成功注册。
OTHER_FAILURE (-1):表明发生不确定错误。不执行文件更新。
注解:
·在调用任何使用SHAREDFILE选项的函数前,必须使用InstallationInfo来设置应用程序信息,并且必须使用DeinstallStart函数设置卸载信息。
·当使用VerUpdateFile时,你可能需要为SRCDIR设置一个值,而不是让InstallShield自动设置它。因为函数在SRCDIR文件夹中寻找文件,你可能需要临时设置系统变量来确保VerUpdateFile会找到该文件。如果你要这么做,在将SRCDIR的值临时设置为另一个文件夹前使用VarSave来保存该值。调用VerUpdateFile函数后,使用VarRestore来重新设置SRCDIR。
·对于文件传输,VerSearchAndUpdateFile的可能的替换函数是XCopyFile,,它可以做版本检测,标记锁定的.dll和.exe文件待系统重启后更新,并且递增共享的.dll和.exe文件的注册表访问计数器。
22 杂项函数
下列函数提供不同的功能,如低层硬件接口,组件创建和操作和用户输出。
Do
执行当前定义的EXIT 和 HELP处理程序。
DoInstall
运行另一个InstallShield安装程序。
Handler
指定一个对退出和帮助事件响应时转移到的标号。
ISCompareServicePack
比较安装在目标OS上的服务程序包数和指定的服务程序包数。
MessageBeep
产生一个标准警告蜂鸣。
SendMessage
发送一个消息到另一个窗口或应用程序。
Sprintf
返回一个格式化的包含一个或多个字符,数字或字符串值的字符串。
System
退出到DOS,重启Windows或重启计算机。
VarRestore
恢复上一次调用VarSave时保存的系统变量SRCDIR和 TARGETDIR 的值。
VarSave
保存系统变量SRCDIR 和 TARGETDIR的当前值。
22.1 Do
语法:Do (nOperation);
说明:退出和帮助处理程序只支持向后兼容。在一个基于事件的脚本中,你必须使用OnCanceling 和 OnHelp事件处理程序来代替。
Do函数执行当前定义的EXIT和 HELP处理程序,给你对这些处理程序更大的控制,它们通常仅当用户按下F1键(HELP), F3 键(EXIT), 或 Cancel button (EXIT)时执行。使用Do函数,你可以执行EXIT 或 HELP来响应自定义对话框事件或从内部对话框来的任何用户输入。你也可以在脚本开发多成中使用Do函数来测试你的EXIT和 HELP 处理程序。
使用Do函数来注册排队的自注册文件。文件使用针对安装自注册文件的“批处理方法”来排队等候注册。当你调用Do(SELFREGISTRATIONPROCESS)时,InstallShield进行所有排队文件的自注册,即使它们中一个失败。
如果Do因任何原因失败,它会返回-1。自注册失败的文件的名称保存InstallShield系统变量ERRORFILENAME中,用分号分隔。
参数:
nOperation
指定要执行的操作类型。在该参数位置传递下列预定义常量之一:
EXIT:启动Exit操作。如果没有定义EXIT处理程序,则显示缺省的Exit对话框。
HELP:启动Help操作。如果没有定义HELP处理程序,函数没有任何动作。
SELFREGISTRATIONPROCESS:注册所有已经排队等候注册的自注册文件。
返回值:
0:Do函数成功启动指定操作。
< 0:Do函数未能启动指定操作。
注解:
·Do函数允许在用户没有按下F1或F3键时当前定义的HELP和EXIT处理程序执行。Do函数也比goto语句(它可以被使用来调用HELP和EXIT处理程序标号)提供更大的通用性。Goto语句不能使用在所有的环境中,但Do函数任何时间都可以被虚拟调用。有关缺省和自定义HELP和EXIT处理程序的更多信息,参阅Handle函数。
22.2 DoInstall
语法:DoInstall (szInsFile, szCmdLine, lWait);
说明:DoInstall函数运行另一个InstallShield安装程序。这个函数被调用时,第二个安装程序立即被执行。参数lWait指定调用脚本在继续执行之前是否要等待运行的安装程序完成。
由DoInstall调用的安装必须和运行它的安装有相同的主版本号和次版本号的InstallShield创建。如果试图用DoInstall来运行一个由任何其它InstallShield版本创建的安装程序,则都不可能成功。
如果第二个安装程序运行另一个可执行应用程序,第一个安装程序对运行的应用程序不能控制,也没有办法监控运行应用程序的状态。
参数:
szInsFile
指定要运行的已编译脚本文件(.inx)的全限定名(包含一个驱动器指示符和完整路径)。
szCmdLine
指定一个InstallShield命令行。这儿你可以指定任何有效的启动InstallShield命令行,然而,注意,在这个环境(上下文)中不适当的-f 和-l选项,不能被使用。
lWait
指定调用脚本在继续执行之前是否要等待运行的安装程序完成。在该参数位置传递下列预定义常量之一:
NOWAIT:调用安装程序在运行第二个安装程序后立即继续。
WAIT:调用安装程序在继续前要等待被运行的安装程序终止。
返回值:
1:由DoInstall调用(以WAIT为第三个参数)的安装程序成功终止。控制程序继续原安装程序中DoInstall函数下的语句。
2:由DoInstall调用(以NOWAIT为第三个参数)的安装程序成功终止。控制程序继续原安装程序中DoInstall函数下的语句。
-1:由DoInstall调用的安装程序不能被初始化。该错误的通常原因是丢失一个所需的安装文件,任何运行第二个安装程序时发生的一般错误都会产生该返回值。
-2:由DoInstall调用(以WAIT为第三个参数)的安装程序不能找到由szInsFile指定的.inx脚本文件。
-3:由DoInstall调用(以WAIT为第三个参数)的安装程序被用户取消。
任何其它负值:发生一个未确定错误。
注解:
·第二个安装程序总是运行在由系统变量SELECTED_LANGUAGE当前值指定的语言中。即使第二个安装程序的命令行中使用-l参数,也是如此。
·注意被运行的安装程序和运行它的安装程序中只有一个共享文件,就是IKernel.ex_。因此,正常运行时,第二个安装程序所需的所有其它安装文件必须和Setup.inx文件位于相同文件夹中。如果不存在这些文件,安装程序不会被正确运行。
因此,建议你将由媒体向导创建的所有文件拷贝到你从中运行第二个安装程序的文件夹中。如果你从第一个安装程序的安装支持文件夹(SUPPORTDIR)中运行第二个安装程序,则建议你把这些文件放置在第一个安装程序的安装文件窗格中的适当的语言和操作系统文件夹中,因而安装初始化时,它们会被自动解压缩在第一个安装程序的支持文件夹中。
22.3 Handler
语法:Handler (nObject, Label);
说明:退出和帮助处理程序只支持向后兼容。在一个基于事件的脚本中,你必须使用OnCanceling 和 OnHelp事件处理程序来代替。
Handler函数创建事件的自定义处理程序,如Help的加速键(F1),Cancel的加速键和Exit的加速键(F3)。如果用户按下F1键,则当前定义的HELP处理程序被执行。如果用户按下F3键,则当前定义的EXIT处理程序被执行。如果你没有用Handler函数定义自定义的HELP和EXIT处理程序,则缺省的处理程序将被执行。缺省的EXIT处理程序显示一个Exit对话框。缺省的HELP处理程序不作任何处理。
为执行用Handler定义的自定义处理程序,当nObject事件发生时,InstallShield调用参数Label指定的唯一标号。当InstallShield达到处理程序代码中的返回语句(在标号的下一句语句)时,控制程序返回到该语句(如果处理程序标号没有被调用,该语句已经接着执行)。
使用Handler,你可以指定EXIT或 HELP的自定义处理程序。你可以在Exit处理程序中显示MessageBox, SprintfBox, 和 AskYesNo对话框;然而,你不能显示Sd对话框。
参数:
nObject
指定转移(陷阱)事件。在该参数位置传递下列预定义常量之一:
EXIT:指定当Cancel按钮或F3加速键被按下时的自定义处理程序。如果你不定义一个处理程序,当Cancel按钮或F3加速键被按下时将显示一个缺省Exit对话框。
HELP:指定按下F1加速键时的自定义处理程序。如果你不定义一个处理程序,按下F1加速键时不作任何处理。
Label
指定当按下指定的按钮或加速键时程序必须跳转到的标号名。不要定义该标号为一个数值型值或一个字符串值。为取消一个当前定义的处理程序和重新安装缺省处理程序,给该参数传递-1。该方法在一些脚本中有用,那些脚本中安装的一个自定义处理程序只提供给特定进程,然后就转到缺省处理程序。
返回值:
0:Handler成功创建处理程序。
< 0:Handler未能创建处理程序。
注解:
·不要定义标号名为一个数值型值或一个字符串值。
·有效的加速键是F1键(Help)和F3(Exit)(它和脚本对话框中的Cancel按钮的效果一样)。
Help(F1)允许你运行Help引擎或提供其它合适的Help。当用户按下F1键,InstalShield调用当前定义的Help处理程序。你可以在Help处理程序中提供任何类型的Help函数功能。·如果你想要提供上下文有关Help,你必须跟踪你脚本中的上下文。
例如,你可以有一个包含当前上下文字符串的字符串值。然后你可以在Help处理程序的一个switch-case语句中使用该字符串值,根据该上下文字符串的值来指定适当的Help事件。你也可以测试你的Help处理例程中的全局变量nSdDialog。nSdDialog被设置为当前执行的Sd对话框的对话框ID(在InstallShield Include文件夹中的Sdrc.h中描述)。(当没有Sd 对话框执行时,nSdDialog不被定义。)因此当一个Sd对话框执行时,你可以让用户访问Sd对话框特定的Help。
·正如Help处理程序,你也可以定义并执行自定义和Sd对话框特定的EXIT处理程序。
·在脚本中,EXIT和HELP处理程序标号和它们的相关代码必须放置在结束程序语句之前。
22.4 ISCompareServicePack
语法:ISCompareServicePack (szServicePack);
说明:ISCompareServicePack函数仅和用InstallShield以前的版本创建的脚本兼容。我们建议你通过检测SYSINFO.WINNT.nServicePack 的值来确定Windows NT Service Pack数。
ISCompareServicePack函数比较安装在Windows NT系统上的服务程序包数和由szServicePack指定的服务程序包数。
参数:
szServicePack
指定要和目标计算机上的服务程序包数比较的服务程序包数。该字符串的格式必须是"Service Pack n",n是服务程序包数。比较区分大小写。
返回值:
LESS_THAN (1):目标系统上没有安装服务程序包或其数目小于参数szServicePack传递的值。
EQUALS (2):服务程序包数匹配。
GREATER_THAN (0):目标系统上的服务程序包数大于参数szServicePack传递的值。
-1 :ISCompareServicePack未能比较服务程序包数。
注解:
该函数仅工作于WinNT4.0。
22.4 MessageBeep
语法:MessageBeep (nReserved);
说明:MessageBeep函数播放缺省的系统声音。
参数:
nReserved
给该参数传递0。不允许其它值。
返回值:
该函数无返回值。
注解:
·你有可以通过调用PlayMMedia播放一个音频文件来提供音频信号。
22.5 SendMessage
语法:SendMessage (nHwnd, nMsg, nwParam, nlParam);
说明:SendMessage函数发送一个消息到一个或多个窗口。SendMessage直到消息已经被处理才返回到安装脚本的控制程序。SendMessage函数是直接传递Windows API SendMessage。详细信息请咨询Windows编程文档。
参数:
nHwnd
指定标识接收消息的窗口的句柄。
nMsg
指定发送给窗口的消息。
nwParam
指定附加消息的信息。
nlParam
指定附加消息的信息。
返回值:
InstallShield SendMessage函数返回它以相同名调用Windows API返回的值。返回值依赖于由Windows API SendMessage接受的消息。有关Windows API SendMessage的返回消息的详细信息请咨询Windows编程文档。
注解:
·为用参数nMsg发送一个消息或处理返回值,你必须在脚本中定义和Windows.h中定义的常量等值的常量。你不能在你的脚本中使用#include来包含Windows.h。
22.7 Sprintf
语法:Sprintf (svResult, szFormat [,arg] [,...]);
说明:Sprintf函数从可变数据中使用格式说明符和匹配变量来创建一个字符串。Sprintf函数和Microsoft Windows API wsprintf一样工作。
参数:
svResult
从传递到第三个参数和随后参数的变量中创建一个字符串,根据第二个参数szFormat的说明进行格式化并返回该字符串。
szFormat
指定一个字符串,它可以包含文字文本并且必须包含针对每个嵌入到svResult返回的字符串中的变量的相应的格式说明符。
arg
你可以指定多达9个可被包含在消息中的变量。消息中的每个格式说明符都必须有相应的变量;每个变量的类型必须和它各自的格式说明符相匹配。
Sprintf will generate a compiler error or fail at run time under the following conditions:
Sprintf在下列情况下产生一个编译错误或运行时失败:
指定了多于9个格式说明符和变量:编译错误。
变量的数目和格式说明符的数目不匹配。当一个说明符没有一个相应的变量时,结果字符串在该说明符的位置将包含不可预测的字符。当变量多于说明符时,多余的变量将不会被插入到结果字符串中。
一个变量和它相应的格式说明符不匹配。结果字符串将在该说明符的位置将包含不可预测的字符。
返回值:
如果Sprintf函数成功,返回值是保存在变量svResult中的字符串的长度,不包括终结空字符。
22.8 System
语法:System (nOp);
说明:使用System函数来重启Windows或重启系统。System函数不执行一个异常中止的安装(即,它不已经删除安装的文件)。然而,InstallShield删除它放置在系统中的任何临时目录和临时文件来进行安装。
System函数具有与InstallShield的更早版本的兼容性。使用InstallShield的当前版本时,用来重启Windows 或系统的最好的函数是RebootDialog 和 SdFinishReboot。这两个函数中,SdFinishReboot函数功能性最好。参阅各自的函数说明来看哪个最适合你的需要。
参数:
nOp
指定在终止安装后执行什么。在该参数位置传递下列预定义常量之一:
SYS_BOOTMACHINE:重启系统。
注解:
·该函数调用Microsoft Windows API ExitWindows。由于当今系统中BIOS类型的千变万化,该函数高度依赖于BIOS和系统的交互作用。
·一些系统当该函数被调用时不会重启或可能挂起。许多安装例程(包括系统软件如MS-DOS的安装)在它们重启系统前给用户显示一个警告消息。该警告消息指示发生了什么并指导用户在命令失败时手动重启系统。
22.9 VarRestore
语法:VarRestore (nType);
说明:VarRestore函数给系统变量SRCDIR 和 TARGETDIR重新赋值为先前调用VarSave而保存的值。无论何时你要临时修改SRCDIR 和 TARGETDIR的值(例如在调用XcopyFile前设置源目录和目标目录),你都要调用VarSave。后面再调用VarRestore来把这些变量的值设置为它们原先的值。
参数:
nType
指定常量SRCTARGETDIR来表明你要恢复先前保存的系统变量SRCDIR 和 TARGETDIR的值。
返回值:
0:表明恢复了先前保存的系统变量SRCDIR 和 TARGETDIR的值。
< 0:表明没有可以恢复的保存值。当你没有首先调用VarSave而调用VarRestore时,或你调用VarStore的次数多于你调用VarSave的次数时,发生该错误。
注解:
·每次你调用VarSave时,InstallShield把SRCDIR 和 TARGETDIR的当前值推进一个内部栈中(即一个FILO(Fisrt In Last Out)的存储区域)。这种方法允许你在内存中堆积一系列的SRCDIR 和 TARGETDIR的值。然后你可以调用VarRestore从堆栈中以与存放它们的次序相反的次序来检索这些值。
例如,如果你调用VarSave三次(在这些调用中没有调用VarRestore),则在堆栈中有三组SRCDIR 和 TARGETDIR值。第一次调用VarRestore将恢复第三次调用VarSave时的值。下一次调用VarRestore将恢复第二次调用VarSave时的值。第三次调用VarRestore将恢复第一次调用VarSave时的值。这时堆栈变空。
22.10 VarSave
语法:VarSave (nType);
说明:VarSave函数保存系统变量SRCDIR 和 TARGETDIR的当前值(它们可以被许多其它InstallShield函数使用)。无论何时你要临时修改SRCDIR 和 TARGETDIR的值(例如在调用XcopyFile前设置源目录和目标目录),你都要调用VarSave。后面再调用VarRestore来把这些变量的值设置为它们原先的值。
参数:
nType
指定常量SRCTARGETDIR来表明你要保存系统变量SRCDIR 和 TARGETDIR的当前值。
返回值:
0:表明SRCDIR 和 TARGETDIR的当前值被保存。
< 0:表明因为一个内部错误未能保存这些值。仅当系统缺少可用内存时才发生该错误。
注解:
请参阅VarRestore的注解。
*/