Archive for 09月, 2006

InstallShield内部库函数全集一(8)

InstallShield内部库函数全集一(8)
8.文件配置函数
8.1  高级配置文件函数
高级配置文件函数比Ez配置文件函数提供给高级开发人员更大的灵活性和对系统配置的更多控制。为使用这些高级函数访问和编辑一个系统配置文件,可通过调用ConfigFileLoad开始。大多数其它函数只有在系统配置文件已经由ConfigFileLoad打开后才能被调用。当你结束编辑系统配置文件时,调用ConfigFileSave来保存你的修改。注意函数ConfigGetFileName 和ConfigSetFileName既可以和高级配置文件函数也可以和Ez配置文件函数一起使用。
不要把Ez配置文件函数和高级配置文件函数混合起来。调用ConfigFileLoad之后,直到你调用了ConfigFileSave保存你的修改后,你才能使用Ez配置文件函数。
ConfigAdd
添加一个语句到一个已经被装入内存的系统配置文件。
ConfigDelete
从一个系统配置文件中删除一项。
ConfigFileLoad
把一个系统配置文件装入内存来编辑。
ConfigFileSave
保存一个已经由ConfigFileLoad装入内存的系统配置文件。
ConfigFind
在一个系统配置文件中查找一个项目。
ConfigGetFileName
检索缺省系统配置文件的全限定名。
ConfigGetInt
从一个系统配置文件中检索一个值。
ConfigMove
在一个系统配置文件中移动一项。
ConfigSetFileName
指定一个系统配置文件的全限定名。
ConfigSetInt
在系统配置文件中设置一个值。
相关函数:
SdShowFileMods
创建一个对话框,显示建议的文件修改和提供如何进行的选项。
8.1.1  ConfigAdd
语法:ConfigAdd (szKey, szValue, szRefKey, nOptions);
说明:ConfigAdd函数添加一个语句到一个已经被ConfigFileLoad装入内存的系统配置文件中。你可以指定该语句相对于一个参考字的位置,或者你可以在文件首行或末行添加语句。你也可以置换文件中已经存在的一行。调用ConfigAdd前,你必须调用ConfigFileLoad把系统配置文件装入到内存。在你编辑文件后,调用ConfigFileSave 保存文件。
参数:
szKey
指定被添加到系统配置文件中的语句的关键词。
szValue
指定被添加到系统配置文件中的关键词的值。
szRefKey
指定在系统配置文件中与你添加的szKey相对的参考字。如果给该参数传递一个空字符串(“”),该行被添加为文件的首行或末行,具体依赖于传递给nOptions的预定义常量。
nOptions
指定该行是被添加到包含参考字的行的前面还是后面,或者该行是否置换一存在行。在该参数位置传递下列预定义常量之一:
BEFORE:该语句被添加到包含szRefKey的行的前面。如果szRefKey是一个空字符串(“”),该语句被添加到文件首行。
AFTER:该语句被添加到包含szRefKey的行的后面。如果szRefKey是一个空字符串(“”),该语句被添加到文件末行。
REPLACE:该语句将置换文件中已存在的一行。如果存在多行有相同的字,仅最后一行被置换。如果要被置换的一行不存在于文件中,新行添加为文件末行。
返回值:
0:ConfigAdd成功添加语句到指定的系统配置文件。
< 0:ConfigAdd未能添加语句到指定的系统配置文件。
注解:
?当ConfigAdd函数置换一系统配置文件中的一行时,它比较两行中的参考字:
?一个参考字是一个标识该行的一个子串。例如,在下列例子中,参考字是Kybrd.drv。
   DEVICE=C:\Windows\System\Kybrd.drv /1024 /C:345
在下一语句中,参考字是PATH:
   SET PATH=C:\Windows;C:\Windows\System
8.1.2  ConfigDelete
语法:ConfigDelete (szKey);
说明:ConfigDelete函数删除已经被ConfigFileLoad装入内存的系统配置文件中的行。参数szKey指定一个用来标识要被删除行的参考字。在使用高级配置文件函数编辑文件后,你调用ConfigFileSave 保存文件。
参数:
szKey
指定标识要被删除行的参考字。常用参考字包括Himem.sys, FILES, 和 STACKS。
返回值:
0:ConfigDelete成功删除系统配置文件中包含参考字的行。
< 0:ConfigDelete没有能删除指定行。
8.1.3  ConfigFileLoad
语法:ConfigFileLoad (szConfigFile);
说明:ConfigFileLoad函数装入一个指定系统配置文件的拷贝到内存,因而其它高级配置文件函数可以被调用来操作该文件。在参数szConfigFile指定你要编辑的系统配置文件的名称或给szConfigFile传递一个空字符串来编辑缺省系统配置文件(由InstallShield初始设置为系统使用的自举Config.sys文件)。
为得到缺省系统配置文件的全限定名,调用ConfigGetFileName。为时另一个文件为缺省系统配置文件,调用ConfigSetFileName。
注意:你可以调用ConfigFileLoad来创建一个新配置文件。为了这么做,你可以给szConfigFile传递一个不存在的文件名。然后调用其它配置函数来编辑新文件。最后,调用ConfigFileSave将新文件保存到磁盘。
    使用任何高级配置文件函数之前,你必须首先调用ConfigFileLoad将系统配置文件装入到内存。在你修改文件后,调用ConfigFileSave将它保存到磁盘。
参数:
szConfigFile
指定装入内存的系统配置文件的全限定名。为装入缺省系统配置文件,给该参数传递一个空字符串(“”)。
返回值:
0:ConfigFileLoad成功将指定的系统配置文件装入到内存。
< 0:ConfigFileLoad未能将指定的系统配置文件装入到内存。
8.1.4  ConfigFileSave
语法:ConfigFileSave (szBackupFile);
说明:ConfigFileSave函数将由ConfigFileLoad函数装入内存的系统配置文件保存到磁盘。文件保存为它的原始名。如果在szBackupFile指定一个文件名,在被编辑的文件被写到磁盘前原始名被更名为该文件名。如果szBackupFile包含一个空字符串(“”),原始文件被该修改的文件置换。如果你结束用高级配置文件函数修改一个系统配置文件时没有调用ConfigFileSave,所有修改将被丢失。
参数:
szBackupFile
指定在编辑被保存前是否要备份原始文件的一个拷贝。
如果无需创建备份文件,给该参数指定一个空字符串。
如果原始文件必须用一个特定名备份,给该参数传递该文件名。该文件名必须是非限定的(也就是,不限定一个驱动器和/或路径)。注意如果具有指定名称的文件已经存在,ConfigFileSave将生成一个唯一的文件扩展名,如接下去布告牌项目中描述。
    如果原始文件备份时必须带有一个安装生成的文件的扩展名,指定通配符””作为文件扩展名(例如,”Config.”)。然后安装将赋一个数值型值,从1001开始,作为扩展名。如果一个有该扩展名的文件已经存在,扩展名值将被增加一直到产生一个唯一的文件名。
一旦创建了备份,InstallShield保存备份文件名到系统变量INFOFILENAME。
注意下列重要事实:1)如果上一次对ConfigFileLoad的调用指定的配置文件不存在,备份文件将和由调用ConfigFileSave创建的配置文件相同。2)如果szBakupFile指定原始配置文件名,那么将不会创建一个备份文件。
返回值:
0:ConfigFileSave成功将文件从内存写到磁盘。
< 0:ConfigFileSave未能将文件写到磁盘。
8.1.5  ConfigFind
语法:ConfigFind (szRefKey, svResult, nOptions);
说明:ConfigFind函数查找一个已经由函数ConfigFileLoad装入到内存的系统配置文件。参数szRefKey是一个参考字,来指定在文件中的查找目标。如果该参考字被找到,它的值返回到参数svResult。为找到所有出现szRefKey的地方,将参数nOptions设置为CONTINUE重复调用该函数。为从文件头部开始查找,将nOptions指定为常量RESTART。你编辑该文件后,调用ConfigFileSave来保存它。
参数:
szRefKey
指定要查找的参考字。如果参考字是一个没有文件扩展名的文件名,查找中将包括所有文件扩展名。例如,如果你指定Win.com,查找仅对该参考字。如果你指定WIN,Win.exe文件,Win.dll文件,Win.sys文件等等都被返回。
svResult
返回在系统配置文件中找到的参考字的值。
nOptions
指示是否从文件开始处开始查找还是从上一个查找中断处继续。在该参数位置传递下列预定义常量之一:
RESTART:从文件开始处开始查找。
CONTINUE:从系统配置文件当前位置开始查找。
COMMAND:指示szRefKey处的参考字是一个命令,而不是一个环境变量。COMMAND常量可以通过使用按位或操作符(|)来和RESTART常量或 CONTINUE常量结合,如下例所示:
ConfigFind("Vga.drv", svResult, CONTINUE | COMMAND);
返回值:
0:ConfigFind成功找到指定的参考字,并在svResult返回。
< 0:ConfigFind未能找到指定的参考字。
注解:
一个系统配置文件可以包含环境变量和命令。为区别相同名称的环境变量和命令,使用COMMAND常量来指定你在寻找一个可执行命令。
8.1.6  ConfigGetFileName
语法:ConfigGetFileName (svFileName);
说明:ConfigGetFileName函数检索缺省系统配置文件(由InstallShield初始设置为当目标系统启动时被执行的Config.sys文件)的全限定名。
参数:
svFileName
返回缺省系统配置文件的全限定名。
返回值:
0:ConfigGetFileName成功检索缺省系统配置文件的全限定名。
< 0:ConfigGetFileName未能检索缺省系统配置文件的全限定名。
注解:
很少情况下InstallShield可能不能确定缺省配置文件的全限定名。这种情况下,svFileName将是一个空字符串(“”)。
8.1.7  ConfigGetInt
语法:ConfigGetInt (szKey, nvValue);
说明:ConfigGetInt函数检索一个由函数ConfigFileLoad装入到内存的系统配置文件中的参考字的整型值。ConfigGetInt从等号右边只有一个值的命令中检索值。ConfigGetInt不工作在一个有不止一个值的命令中。例如,ConfigGetInt识别语句FILES=20并返回数字20,但它不识别语句STACKS=9,128。
    在调用ConfigGetInt前,你必须首先调用ConfigGetLoad将系统配置文件装入到内存。在你编辑文件后,调用ConfigFileSave来保存文件。
参数:
szKey
指定要从中检索整型值的语句的参考字。
nvValue
返回参考字的整型值。
返回值:
0:ConfigGetInt成功检索整型值。
< 0:ConfigGetInt未能检索整型值。
8.1.8  ConfigMove
语法:ConfigMove (szMove, szRefKey, nOptions);
说明:ConfigMove函数移动一个由函数ConfigFileLoad装入到内存的系统配置文件中的一行。该行可以被移动到文件最前面和最后面的位置,或者在文件中一特定行的前面或后面。
在调用ConfigMove函数前,你必须首先调用ConfigFileLoad来将Config.sys文件装入到内存。在你编辑文件后,调用ConfigFileSave 来保存文件。
参数:
szMove
指定要移动的行。
szRefKey
指定标识参考行的关键字,参考行用来定位要被移动的行。要移动的行的位置由参数nOptions的值确定。
nOptions
指定你要移动参数szMove指定的行到包含szRefKey指定的参考字的行的前面或后面。在该参数位置传递下列预定义常量之一:
BEFORE:由szMove指定的行被放置到包含szRefKey的行前面。如果szMove是一个空字符串(“”),该行被放置到系统配置文件首行的前面。
AFTER:由szMove指定的行被放置到包含szRefKey的行后面。如果szMove是一个空字符串(“”),该行被放置到系统配置文件末行的后面。
返回值:
0:ConfigMove成功移动系统配置文件中的指定行。
< 0:ConfigMOve未能移动该行。
8.1.9  [...]

InstallShield内部库函数全集一(9)

InstallShield内部库函数全集一(9)
9.文件和文件夹函数
文件和文件夹函数提供一个全面的方法来处理文本文件,二进制文件和文件夹。许多函数使用变量TARGETDIR 和SRCDIR作为路径并只接受文件名作为参数。适当时也接受通配符。
ChangeDirectory
使指定的目录为当前目录。
CloseFile
关闭一个打开的文件。
CopyFile
将一个文件从一个文件夹拷贝到另一个。
CreateDir
创建一个新文件夹。
CreateFile
创建一个指定文件名的文件。
DeleteDir
删除一个文件夹。
DeleteFile
删除一个文件。
ExistsDir
确定指定目录是否存在。
ExistsDisk
确定指定磁盘是否存在。
FileCompare
将一个文件和另一个比较。
FileDeleteLine
删除一个文本文件中的一行。
FileGrep
在一个文本文件中查找指定文本。
FileInsertLine
在一个文本文件中插入一行。
FindAllDirs
查找指定文件夹下的所有子文件夹。
FindAllFiles
查找指定文件夹中的所有和一个文件说明匹配的文件和它的子文件夹。
FindFile
查找在指定文件夹中和一个文件说明匹配的第一个文件。
GetFileInfo
检索一个文件的属性,日期,时间和大小。
GetLine
从一个打开的文件中检索一行文本。
OpenFile
打开一现存文件。
OpenFileMode
用OpenFile函数设置文件打开的方式。
ReadBytes
从一个二进制文件中读取指定的字节数。
RenameFile
更名一个文件。
SeekBytes
在一个二进制文件中定位文件指针。
SetFileInfo
设置一个文件的属性,日期和时间。
WriteBytes
在一个二进制文件的当前文件指针位置写入指定数目的字节。
WriteLine
将一个字符串写入一个文本文件。
XCopyFile
将一个或多个文件从一个源文件夹拷贝到一个目标文件夹,如果指定则包括子文件夹。
相关函数
SelectDir
请参阅4.10。
9.1  ChangeDirectory
语法:ChangeDirectory (szPath);
说明:ChangeDirectory函数设置当前目录。
参数:
szPath
指定要被设置为当前目录的目录名。该名可以是一个全限定路径名或一个UNC路径;它必须不包括一个尾随反斜杠。如有必要,在调用ChangeDirectory前调用StrRemoveLastSlash。
返回值:
0:ChangeDirectory成功设置指定目录为当前目录。
< 0:ChangeDirectory未能设置指定目录为当前目录。
注解:
?注意在你调用ChangeDirectory将一个指定目录设为当前目录后,该目录不能被删除。在你可以删除该目录前,你必须再次调用ChangeDirectory来设置一个不同的当前目录。
9.2  CloseFile
语法:CloseFile (nvFileHandle);
说明:CloseFile函数关闭一个已经由调用OpenFile打开的文件。在你关闭一个文件后,你不能从中读或写到该文件。
参数:
nvFileHandle
指定要关闭的文件的句柄。
返回值:
0:表明该函数成功关闭该文件。
< 0:表明该函数未能关闭该文件。
9.3  CopyFile
语法:CopyFile (szSrcFile, szTargetFile);
说明:CopyFile函数创建一个由参数szSrcFile指定的文件的拷贝。新文件由参数szTargetFile指定文件名。
参数:
szSrcFile
指定要拷贝的文件的文件名。如果该文件名是限定的,也就是,如果它包括一个路径,CopyFile将从指定位置拷贝该文件。如果szSrcFile包含一个未限定文件名,也就是,没有路径信息,CopyFile将从由系统变量SRCDIR标识的路径拷贝。为拷贝一组文件,在该参数位置使用通配符。
szTargetFile
指定给由szSrcFile标识的文件的拷贝的名称。如果文件名是限定的,也就是,如果它包含一个路径,CopyFile将把文件拷贝到路径指定的位置。如果szSrcFile包含一个未限定文件名,也就是,没有路径信息,拷贝将被创建在由系统变量TARGETDIR指定的目录中。如果目标目录不存在,它将被创建。
    当由szSrcFile指定的文件名中包含一个通配符时,szTargetFile的文件名部分被忽略;每个源文件以它的现存名被拷贝到由szTargetFile指定的路径。如果szTargetFile包含一个未限定文件名,文件将被拷贝到由系统变量TARGETDIR指定的目录中。因此,CopyFile不能被用来拷贝和重命名一组文件。当szSrcFile包含一个或多个通配符时,源目录和目标目录必须不同。
返回值:
0:表明函数成功地从源目录拷贝文件至目标目录。
< 0:表明函数因下列情况之一未能拷贝所要文件:
COPY_ERR_CREATEDIR (-27):目标目录不能被创建。确保系统变量TARGETDIR中的路径语法正确并且你有权访问目标驱动器。
COPY_ERR_MEMORY (-6):函数未能分配完成拷贝文件进程所需的内存。尽可能多地终止正在运行的应用程序以释放内存。
COPY_ERR_NODISKSPACE (-38):函数未能在目标驱动器上找到足够的磁盘空间来拷贝文件。在目标驱动器上释放磁盘空间。
COPY_ERR_OPENINPUT (-2):函数未能打开系统变量SRCDIR指定的输入文件。确保源文件有一个有效的文件名并且源文件和目标目录都存在。
COPY_ERR_OPENOUTPUT (-3):函数未能拷贝所要文件。
COPY_ERR_TARGETREADONLY (-46):TARGETDIR中的文件是只读文件。删除目标文件的只读属性并重试。
所有其它负值:表明发生一些其它不确定错误。
注解:
?如果你使用未限定文件名并在使用CopyFile时设置SRCDIR和 TARGETDIR的值,在调用CopyFile前用VarSave保存当前值并然后用VarRestore重新设置。如果目标目录不存在,CopyFile创建它。
?你不能通过调用CopyFile时使用通配符来重命名一组文件。然而,单独一个文件时你可以使用CopyFile来做到。
?为包括子目录,调用XcopyFile函数。
?对于文件传输,XCopyFile 是CopyFile的一个完美替换。XCopyFile可以做版本检测,标记锁定的.dll和.exe文件待系统重启后更新,并且递增共享的.dll和.exe文件的注册表访问计数器。
?因为Windows 95及更高版本不允许一个空文件被拷贝,Windows NT不允许创建空文件,CopyFile在这些平台下当被用来拷贝空文件(Size=0KB)时将不工作。
? 在用WriteProfString 或 WriteProfInt修改.ini文件后, Windows 95及更高版本下,你必须在使用CopyFile前刷新高速缓存。所有.ini文件在Windows 95及更高版本下被放在高速缓存中;这种特性可能导致延迟将修改写到指定文件。这接着可能妨碍随后的文件操作。为避免这个问题,简单地以空参数调用WriteProfString来强制Windows 95 及更高版本立即写数据到.ini文件,如下所示:
    WriteProfString ("C:\\Test.ini", "Windows", "KeyboardDelay", "100");
    file://null string ("") for all four parameters
    WriteProfString ("", "", "", "");
    file://CopyFile should now have access to [...]

InstallShield内部库函数全集一(10)

InstallShield内部库函数全集一(10)
10.长文件名函数
下列函数从短文件名创建长文件名,将短文件名转换到长文件名,并且将长文件名用双引号括起使得处理长文件名的操作系统可以识别它们。
LongPathFromShortPath
从一个短文件名创建一个长文件名。
LongPathToQuote
插入或删除环绕一个长文件名的双引号。
LongPathToShortPath
从一个长文件名创建一个短文件名。
10.1  LongPathFromShortPath
语法:LongPathFromShortPath (svPath);
说明:使用LongPathFromShortPath函数转换一个短文件名到它的等价长文件名。
参数:
svPath
指定一个短文件名并且返回它的相关的长文件名。
返回值:
0:表明函数成功。
< 0:表明函数没有成功。
注解:
对于长文件名的解释,请看下面:
Windows 95和其后版本和Windows NT 4.0支持长文件名。长文件名允许用户给目录和文件更多有意义的名称。“长文件名”项指向长文件名和长路径。
InstallShield提供长文件名函数来给不识别长文件名的16位应用程序和32位应用程序的安装提供便利。你有责任确定你的应用程序的要求。 InstallShield提供工具帮助你安装任何类型的应用程序。
10.2  LongPathToQuote
语法:LongPathToQuote (svPath, nParameter);
说明:LongPathToQuote函数放置双引号环绕一个长文件名或从一个长文件名删除双引号。
    在传递长文件名给命令行之前添加双引号到包含空格的长文件名。在用函数LongPathToShortPath将长文件名转换为短文件名前,你必须从长文件名中删除双引号。如果你不这么做,被括起的长文件名保持无效。
    该函数仅当文件名中有一个空字符时将添加引号。例如,引号将不会被加到C:\\ThisismyApp,因为它是一个没有空格的长文件名。
参数:
svPath
指定一个长文件名并返回包含或不包含引号的该名称,依赖于传递给参数nParameter的值。
nParameter
指定引号是否要被添加到长路径或从长路径删除。在该参数位置传递下列预定义常量之一:
TRUE:添加引号到长路径。
FALSE:从长路径删除引号。
返回值:
0:表明函数成功。
< 0:表明函数没有成功。
注解:
请参阅LongPathFromShortPath的注解。
10.3  LongPathToShortPath
语法:LongPathToShortPath (svPath);
说明:LongPathToShortPath函数将一个长文件名转换到它等价的短文件名。短文件名和16位程序兼容,如Notepad.exe 或Mviewer2.exe。16位程序不接受长文件名。参数svPath可以是一个绝对路径或一个相对路径,并且它可以包括一个文件名;但它指定的文件夹或文件必须存在于目标系统。
参数:
svPath
指定一个长文件名并返回它相联系的短文件名。
LongPathToShortPath从长文件名中删除尾随反斜杠。
返回值:
0:表明函数成功。
< 0:表明函数没有成功。
注解:
?请参阅LongPathFromShortPath。
?因为仅当指定的文件夹或文件可以在目标系统上找到时LongPathToShortPath才能成功,你通常必须在指定一个相对路径前设置当前文件夹。例如,如果svPath包含相对路径"InstallShield\InstallShield5 Professional Edition",它存在于文件夹"C:\Program Files",安装将不能找到它除非当前文件夹是"C:\Program Files"。在调用LongPathToShortPath前如有必要使用ChangeDirectory函数来修改当前文件夹,因而目标文件夹或路径能被找到。
?使用ChangeDirectory来指定一个新目录。

InstallShield内部库函数全集一(11)

InstallShield内部库函数全集一(11)

11.INI文件函数
INI文件函数从初始化和配置文件中获得信息或拷贝信息到这些文件。一个初始化文件是一个特殊的包含关键字名-值对的ASCII文件。关键字名-值对代表运行时对应用程序的选项。你也可以访问和修改专用的初始化文件和系统初始化文件。下面的列表简要描述了每个INI文件函数。
    由AddProfString, ReplaceProfString, 或 WriteProfString对.ini文件所做的修改可以存入卸载记录中。然而,必须知道一些重要的限制。更多信息,可查看卸载.ini文件的条目。
AddProfString
在.ini文件的一段中添加一个非唯一键。
GetProfInt
从一个.ini文件中返回一个整数。
GetProfString
从一个.ini文件中返回一个字符串。
GetProfStringList
从一个.ini文件中返回键名和字符串值的列表。
ReplaceProfString
置换一个配置文件(.ini文件)中一个字符串。
WriteProfInt
将一个有整数的字符串写到一个.ini文件中。
WriteProfString
将一个字符串写到一个.ini文件中。
相关函数
SdShowFileMods
创建一个对话框,提议修改文件和提供如何进行的选项。
11.1  AddProfString
语法:AddProfString (szFileName, szSectionName, szKeyName, szValue);
说明:AddProfString函数无条件地添加一个配置字符串到一个.ini文件。使用AddProfString仅添加非唯一键,如那些在System.ini文件的[386Enh]段找到的(device = …)。AddProfString添加KEY=VALUE行到指定的.ini文件的段的结尾。它不置换或更新一个现存键。为更新一个现存的非唯一键,调用ReplaceProfString。为在一个.ini文件中添加一个唯一键或更新一个唯一键的值,调用WriteProfString。
  对.ini文件所做的修改可以存入到卸载记录中。然而,必须知道一些重要的限制。更多信息,可查看卸载.ini文件的条目。
参数:
szFileName
指定要添加配置字符串的.ini文件的名称。如果szFileName是未限定名(也就是,不包括一个驱动器指示符和路径),InstallShield在Windows文件夹中查找该文件。如果文件不存在,它被在指定文件夹中创建,如果文件名中不包括路径,该文件被创建在Windows文件夹中。注意如果文件名限定在一个不存在的路径中,AddProfString将失败。
szSectionName
指定.ini文件中的一个段名。配置字符串被插入在该段的结尾。如果该段不存在,InstallShield创建它。段名必须不被包围在定界中括号中([ ])。注意即使该段中由szKeyName指定的键已经存在,配置字符串仍被插入。
szKeyName
指定要插入的键名。该参数的值将显示在配置字符串中等号左边。
szValue
指定赋给该键的值。该参数的值将显示在配置字符串中等号右边。
返回值:
0:AddProfString成功添加指定的配置字符串到.ini文件。
< 0:AddProfString未能添加指定的配置字符串到.ini文件。
注解:
AddProfString不使用Windows API来修改.ini文件。Windows API 不能处理用AddProfString可能实现的修改类型。
11.2  GetProfInt
语法:GetProfInt (szFileName, szSectionName, szKeyName, nvValue);
说明:GetProfInt函数从一个.ini文件中检索一个整数。参数nDefault指定为0时,GetProfInt和Windows API GetPrivateProfileInt一样工作。
参数:
szFileName
指定一个.ini文件名,从中得到一个键的当前整型值。如果szFileName是未限定名(也就是,不包括一个驱动器指示符和路径),InstallShield在Windows文件夹中查找该文件。
szSectionName
指定.ini文件中的一个段名,从中查找szKeyName。段名必须不被包围在定界中括号中([ ])。
查找该名称时不区分大小写。
szKeyName
指定一个键,其整型值被返回到nvValue。查找该键不区分大小写。
nvValue
返回一个当前赋给szKeyName的整型值。由于GetPrivateProfileInt函数的限制,该函数只可以从该配置文件中返回一个16位的值。
因此,可以被返回的最大值是65,535;更大的值可能不会被正确返回。如果你需要返回一个更大的值,使用通常的文件处理函数,如FileGrep 和 FileInsertLine,然后通过调用StrToNum把返回的字符串转换成一个整型值。
返回值:
GetProfInt总返回0。
注解:
?如用Windows API 函数GetPrivateProfileInt一样,如果因不能找到文件,段或键名而发生的错误不会被返回;而是nvValue包含0。因此,不可能辨别一个错误和一个0的返回值。为辨别0和一个错误,直接调用GetPrivateProfileInt并指定一个候选的缺省值。
?在Windows NT(不是Windows 95及更高版本)下,一些对GetPrivateProfileInt函数(因此也是GetProfInt函数)的调用被自动映象到Windows注册表而不是配置文件。
 11.3  GetProfString
语法:GetProfString (szFileName, szSectionName, szKeyName, svResult);
说明:GetProfString函数从一个指定的.ini文件中检索一个配置字符串。GetProfString和Windows API GetPrivateProfileString一样工作。
参数:
szFileName
指定一个.ini文件名,从中得到一个键的当前值。如果szFileName是未限定名(也就是,不包括一个驱动器指示符和路径),InstallShield在Windows文件夹中查找该文件。
szSectionName
指定.ini文件中的一个段名,从中查找szKeyName。段名必须不被包围在定界中括号中([ ])。
查找该段名时不区分大小写。为得到一个INI文件中的所有段名列表,给该参数传递一个空字符串。更多信息请看下面的注解。
szKeyName
指定一个键,它的值被返回到svResult。查找该键时不区分大小写。为得到一个段中所有键名的列表,给该参数传递一个空字符串。更多信息请看下面的注解。
svResult
如果szSectionName指定一个段名,szKeyName指定一个键名,该键的值被返回到该参数。如果szSectionName指定一个空字符串,所有段名返回到svResult。如果szKeyName指定一个空字符串,该段中的所有键名返回找svResult。
返回值:
0:GetProfString成功返回配置字符串的值。
< 0:GetProfString未能返回配置字符串的值。
-2:该键的值的长度超过2048个字符(可以由GetProfString返回到svResult的最大字符数)。
注解:
?为得到一个INI文件中所有段名的列表,该参数szSectionName传递一个空字符串。由空字符定界的段名返回到参数svResult。SvResult必须足够长来接受所有的段名。使用StrGetTokens函数来从该字符串中析取单个段名。
?为得到由szSectionName指定的段中的所有键名的列表,给参数szKeyName传递一个空字符串。由空字符定界的键名返回到参数svResult。SvResult必须足够长来接受所有的键名。使用StrGetTokens函数来从该字符串中析取单个键名。
?GetProfString使用你的操作环境的API提供的函数来访问.ini文件。因此,InstallShield的函数功能性可能受操作环境的限制。
11.4  GetProfStringList
语法:GetProfStringList (szFileName, szSectionName, listKeyNames, listValues);
说明:GetProfStringList函数从指定的INI文件中的指定段中检索键名和字符串值列表。
参数:
szFileName
指定一个.ini文件名,从中得到键名和字符串值。如果szFileName是未限定名(也就是,不包括一个驱动器指示符和路径),InstallShield在Windows文件夹中查找该文件。
szSectionName
指定.ini文件中的一个段名,从中查找键名和字符串值。段名必须不被包围在定界中括号中([ ])。查找该段名时不区分大小写。
listKeyNames
返回一个键名列表。由listKeyNames标识的字符串列表必须已经通过调用ListCreate而被初始化。
listValues
返回一个字符串值的列表。由listValues标识的字符串列表必须已经通过调用ListCreate而被初始化。
返回值:
0:表明函数成功读段并将键名和字符串值插入到指定列表中。
-2:表明一个或所有列表的ID是无效的。其它负值表明函数未能读段或未能将键名和字符串值插入到指定列表中。
11.5  ReplaceProfString
语法:ReplaceProfString (szFileName, szSectionName, szKeyName, szOrigValue,
  szReplaceValue);
说明:ReplaceProfString函数置换.ini文件中的一个配置字符串。该函数可以置换重复键(非唯一键)的值,如在System.ini文件中[386Enh]段中找到的那些(device = …)。该函数查找一个szKeyName [...]

InstallShield内部库函数全集一(12)

InstallShield内部库函数全集一(12)
12.共享和锁定文件函数
一个共享文件是一个可以被多个应用程序使用的文件,如.dll,.vbx或驱动程序。InstallShield保护共享文件在卸载过程中不被删除。
  使用SHAREDFILE选项的函数把所有的文件都视为共享文件,因而为所有包含的文件递增注册表引用计数器。如果文件存在于目标目录并且它的注册表引用计数器大于0,则InstallShield将其注册表引用计数器增一。如果共享文件不存在于目标目录并且它没有引用计数器,InstallShield创建该计数器并设置它为1。如果共享文件已经存在于目标目录当没有引用计数器,InstallShield创建该计数器并初始化它为2,作为防止在卸载过程中意外删除的预防措施。
  共享文件当它们被锁定时不能被更新。一些InstallShield文件传输函数使用SHAREDFILE选项,因而在文件传输过程中被锁定的.dll和.exe文件可以被记录并在Windows 或系统重启时被更新。
  InstallShield将一个正被一个应用程序或系统使用的文件视为锁定。锁定文件不必要是共享文件。
下列函数处理共享和锁定文件:
Is
请参阅3.9。
RebootDialog
请参阅4.9。
SdFinishReboot
请参阅5.17。
VerUpdateFile
请参阅21.5。
XCopyFile
请参阅9.28。

InstallShield内部库函数全集一(13)

InstallShield内部库函数全集一(13)
13.字符串函数
  字符串函数提供处理字符串变量和文字的功能。字符串函数与标准C语言函数相似。返回值也遵守C语言的规定。
CopyBytes
从一个字符串中拷贝指定字节数到另一个。
GetDir
从一个路径名或全限定文件名中删除驱动器标识。
GetDisk
从一个路径名或全限定文件名中检索磁盘驱动器标识。
NumToStr
将一个数字转换为一个字符串。
ParsePath
从一个路径中检索驱动器,路径,文件名或扩展名。
StrCompare
将一个字符串和另一个比较。
StrFind
在另一个字符串中查找一个字符串。
StrGetTokens
基于指定定界符从一个字符串中得到一个令牌。
StrLength
返回一个字符串中的字节数。
StrLengthChars
返回一个字符串中的字符数。
StrRemoveLastSlash
删除一个路径字符串中的最后的反斜杠。
StrSub
从一个字符串中返回一个子串。
StrToLower
转换字符串中的所有字母字符为小写。
StrToNum
转换字符串为一个数字。
StrToUpper
转换字符串中的所有字母字符为大写。
13.1  CopyBytes
语法:CopyBytes (svDest, nIndexDest, svSrc, nIndexSrc, nCount);
说明:CopyBytes函数从一个字符串中拷贝指定的字节数到另一个字符串。你可以在源和目标字符串中指定偏移下标。
参数:
svDest
指定目标字符串。
nIndexDest
指定在目标字符串中的偏移下标(开始点),从这个位置开始插入这些字节。字符串的第一个字节是在位置0。
svSrc
指定源字符串。不要传递一个大小大于256个字符的自动调整大小的字符串。而应该用一个显式大小声明字符串。nIndexSrc
指定源字符串的偏移下标(开始点),从这个位置开始拷贝这些字节。字符串的第一个字节是在位置0。
nCount
指定你要从svSrc拷贝到svDest的总的字节数。该值必须不大于svSrc-1的大小。例如,如果svSrc被声明为大小为512(给它最大字符串长度511),则传递给nCount的值必须是511或更少。
返回值:
0:CopyBytes成功地从一个字符串拷贝指定数目的字节到另一个字符串。
< 0:CopyBytes没有能拷贝这些字节。
注解:
当你工作在二进制文件时,CopyBytes有用。
13.2  GetDir
语法:GetDir (szPath, svDir);
说明:GetDir函数从由szPath指定的全限定路径或文件名中删除驱动器指示符,并在参数svDir返回路径或文件名的余项。路径名必须包含一个驱动器指示符。它可以是一个UNC(通用导航计算机)路径。
在下面的例子中,全限定路径C:\Windows在svDir返回为\Windows。
   GetDir("C:\\Windows", svDir);
在下一个例子中,UNC路径\\TheServer\TheSharedDevice\Programs在svDir返回为\Programs。
   GetDir("\\\\TheServer\\TheSharedDevice\\Programs", svDir);
参数:
szPath
指定包含一个驱动器指示符的路径。
svDir
返回没有驱动器指示符的路径。如果szPath是一个UNC路径,GetDir将返回没有服务器名和共享设备名的路径。
返回值:
0:表明函数成功返回没有驱动器指示符的路径名。
<0:表明函数未能返回没有驱动器指示符的路径名。
13.3  GetDisk
语法:GetDisk (szPath, svDisk);
说明:GetDisk函数从由szPath指定的全限定路径或文件名中析取磁盘驱动器指示符。
参数:
szPath
指定一个包含一个驱动器指示符的全限定路径或文件名。如果不包含一个驱动器指示符,GetDisk将失败。传递给szPath的值可以是一个UNC路径。
svDisk
返回驱动器指示符(包含冒号)。如果szPath是一个UNC路径,GetDisk以”\\服务器\共享设备”格式返回服务器名和共享设备名。
返回值:
0:表明函数成功返回驱动器指示符。
< 0:表明函数未能返回驱动器指示符。
13.4  NumToStr
语法:NumToStr (svString, nValue);
说明:NumToStr函数将一个数字转换为一个字符串。
参数:
svString
返回nValue的字符串等价值(等效字符串)。
nValue
指定要转换为一个字符串的数字。
返回值:
0:表明函数成功将数字转换为一个字符串。
< 0:表明函数未能将数字转换为一个字符串。
13.5  ParsePath
语法:ParsePath (svReturnString, szPath, nOperation);
说明:ParsePath函数检索一个存在路径的指定部分。函数可工作于任何有效路径,包括短路径,长路径和UNC路径,它们可能包含或不包含一个具体文件名。下面是可以用该函数分析的一些路径样本:
\Path1\Path2\Filename.exe
Filename
Filename.exe
\Path1\Path2\Filename
D:
D:\
\\Server Name\Share Name\Share Directory
其它任何合法DOS路径。
参数:
svReturnString
返回参数szPath中的路径由参数nOperation所指定的部分。
szPath
指定要分析的路径。当指定一个不包含一个文件名的路径时,你必须在把它传递给ParsePath之前在路径结尾添加一个反斜杠;否则路径的最后部分会被解释为一个文件名。
nOperation
指定返回路径的哪个元素。在该参数位置传递下列预定义常量之一:
DIRECTORY:表明必须在svReturnString返回路径中去除磁盘驱动器字符和文件名。当该选项使用在一个UNC路径时,ParsePath返回没有服务器和共享设备名的路径,并且没有文件名(可能被指定)。例如,UNC路径\\TheServer\TheSharedDevice\TheApp\TheFile.exe在svReturnString返回\TheApp\。
DISK:表明必须在svReturnString返回磁盘驱动器指示符(驱动器字符后随一个冒号)。当该选项使用在一个UNC路径时,ParsePath返回服务器名和共享设备名。例如,UNC路径\\TheServer\TheSharedDevice\TheApp\TheFile.exe在svReturnString返回\\TheServer\TheSharedDevice。
EXTENSION_ONLY:表明必须在svReturnString返回文件扩展名。它不包括句点。
FILENAME:表明必须在svReturnString返回完整的文件名(也就是说,包括它的文件扩展名)。
FILENAME_ONLY:表明必须在svReturnString仅返回文件名(也就是说,不包括它的文件扩展名)。
PATH:表明必须在svReturnString返回路径中去除文件名。该选项和DIRECTORY不同,因为驱动器指示符(如果在szPath中被指定)包括在返回路径中。当szPath指定一个UNC路径时,服务器名和共享设备名被包括在返回路径中。例如,UNC路径\\TheServer\TheSharedDevice\TheApp\TheFile.exe在svReturnString返回\\TheServer\TheSharedDevice\TheApp\。
返回值:
0:表明函数成功分析路径字符串。
< 0:表明函数未能分析路径字符串。
13.6  StrCompare
语法:StrCompare (szStringA, szStringB);
说明:StrCompare函数比较两个字符串。比较不区分大小写。
参数:
szStringA
指定要比较的第一个字符串。
szStringB
指定要比较的第二个字符串。
返回值:
< 0:表明szStringA的字符串的值小于szStringB的字符串的值。
= 0:表明两个字符串相等。
> 0:表明szStringA的字符串的值大于szStringB的字符串的值。
注解:
?StrCompare函数比较两个字符串,通过检验每个字符串中的第一个字符,然后每个字符串中的第二个字符,以次类推,直到它找到一个不相等的字符或到达了字符串结尾。
?你选择的语言的语言驱动程序确定哪个字符串大或字符串相等。如果你不使用一个语言驱动程序,Windows使用一个内部函数。对于一个双字节字符集(DBCS)版本的Windows,该函数可以比较两个DBCS字符串。
13.7  StrFind
语法:StrFind (szString, szFindMe);
说明:StrFind函数确定传递给参数szFindMe的字符串能否在传递给参数szString的字符串中找到。如果szFindMe 在szString 中找到,StrFind返回szFindMe的第一个字符在 szString 中的位置。注意 szString 中第一个字符的位置是0。该函数不区分大小写并且只可以用来找到szFindMe 在szString中首次出现。
下面的例子中,StrFind将返回值13。
   nStartPos [...]

InstallShield内部库函数全集一(14)

InstallShield内部库函数全集一(14)
14.路径缓冲函数
路径缓冲函数有助于你处理包含查找路径的字符串。路径缓冲函数工作在一个唯一的作为路径缓冲的临时字符串变量。该路径缓冲在InstallShield内部被定义;所有路径字符串函数对路径缓冲中的内容起作用。
   这些函数不支持长文件名。在将长文件名传递到一个路径缓冲函数前调用LongPathToShortPath将它转换到等价的短文件名。
    路径函数帮助你操作和创建路径字符串。你一旦创建一个路径字符串,你可以把它保存到合适的文件中。
PathAdd
将一个路径添加到路径缓冲中的查找路径。
PathDelete
从路径缓冲中删除一个目录。
PathFind
在路径缓冲中找到一个特定路径或任何包含一个特定名称的路径。
PathGet
检索路径缓冲的当前值。
PathMove
重新整理路径缓冲。
PathSet
分配一个值给路径缓冲。
14.1  PathAdd
语法:PathAdd (szDir, szRefDir, bRefDir, bPosition);
说明:PathAdd函数添加一个路径到路径缓冲中的查找路径。使用该函数你可以指定和路径缓冲中的一个现存目录相关联的目录位置。另外,你可以添加该路径作为路径缓冲中的第一个或最后一个目录。
  该函数和Autoexec.bat文件中的路径语句或路径环境变量无关。它仅作用在路径缓冲,帮助你创建,修改和操作查找路径。然后你可以通过使用不同的批处理文件函数将修改的路径缓冲字符串添加到Autoexec.bat文件。该函数不支持长文件名。在将长文件名传递到一个路径缓冲函数前调用LongPathToShortPath将它转换到等价的短文件名。
参数:
szDir
指定要添加到路径缓冲中的路径。
szRefDir
指定当前路径缓冲中与将要被添加的新路径相关的路径。
bRefDir
指定szRefDir是否是一个全限定路径。在该参数位置传递下列预定义常量之一:
FULL:SzRefDir是一个全限定路径(也就是,包括一个驱动器指示符和到一个目录的完整路径)。
PARTIAL:SzRefDir仅是目录名(没有驱动器和路径信息)。
bPosition
指定szDir要被插入到的相对于szRefDir的位置。在该参数位置传递下列预定义常量之一:
AFTER:指定szDir被插入到szRefDir 之后。如果szRefDir指定一个空字符串,szDir被插入到路径缓冲中的路径结尾。
BEFORE:指定szDir被插入到szRefDir 之前。如果szRefDir指定一个空字符串,szDir被插入到路径缓冲中的路径前面。
返回值:
0:表明函数成功添加一个目录到路径缓冲。
< 0:表明函数未能添加一个目录到路径缓冲。
注解:
?如果你在szDir指定了一个当前已经存在于路径缓冲中的目录,InstallShield将复制它,并且前面存在的目录位置不被修改。 InstallShield忽略在目录名结尾的反斜杠。
14.2  PathDelete
语法:PathDelete (szDir, bDir);
说明:PathDelete函数删除路径缓冲中的一个特定路径。你可以指定路径名或输入一个全限定路径。
  该函数和Autoexec.bat文件中的路径语句或路径环境变量无关。它仅作用在路径缓冲,帮助你创建,修改和操作查找路径。调用PathGet得到路径缓冲中的内容,调用PathSet设置路径缓冲中的内容。该函数不支持长文件名。在将长文件名传递到PathDelete前调用LongPathToShortPath将它转换到等价的短文件名。
参数:
szDir
指定要从路径缓冲中删除的路径。
bDir
指定szRefDir是否是一个全限定路径。在该参数位置传递下列预定义常量之一:
FULL:SzRefDir是一个全限定路径(也就是,包括一个驱动器指示符和到一个目录的完整路径)。
PARTIAL:SzRefDir仅是目录名(没有驱动器和路径信息)。
返回值:
0:表明函数成功从路径缓冲中删除一个目录。
< 0:表明函数未能从路径缓冲中删除一个目录。
14.3  PathFind
语法:PathFind (szDir, svResult, bDir, bSearch);
说明:PathFind函数从路径缓冲中查找一个特定目录。你可以以一个全限定名或仅目录名来指定目录。
  该函数和Autoexec.bat文件中的路径语句或路径环境变量无关。它仅作用在路径缓冲,帮助你创建,修改和操作查找路径。然后你可以通过使用不同的批处理文件函数添加该临时路径字符串到Autoexec.bat文件。该函数不支持长文件名。在将长文件名传递到PathFind前调用LongPathToShortPath将它转换到等价的短文件名。
参数:
szDir
指定要在路径缓冲中查找的路径。
svResult
返回由该函数返回的路径缓冲中的完整目录和路径。
bDir
指定szRefDir是否是一个全限定路径。在该参数位置传递下列预定义常量之一:
FULL:SzRefDir是一个全限定路径(也就是,包括一个驱动器指示符和到一个目录的完整路径)。
PARTIAL:SzRefDir仅是目录名(没有驱动器和路径信息)。
bSearch
指定从哪儿开始查找。在该参数位置传递下列预定义常量之一:
CONTINUE:从路径缓冲中的前一个查找结束处继续查找。
RESTART:从路径缓冲的开头开始查找。
返回值:
0:表明函数在路径缓冲中成功查找一个目录。
< 0:表明函数在路径缓冲中未能查找到一个目录。
14.4  PathGet
语法:PathGet (svString);
说明:PathGet函数检索当前保存在路径缓冲(一个由调用PathSet所创建的临时存储区)中的查找路径。路径缓冲使你能创建和编辑一个查找路径。当你编辑完路径,调用PathGet把查找路径放置到一个字符串变量,因而你可以把它传递到你的安装程序中的其它函数。
  该函数和Autoexec.bat文件中的路径语句或路径环境变量无关。它仅作用在路径缓冲,帮助你创建,修改和操作查找路径。然后你可以通过使用不同的批处理文件函数添加该临时路径字符串到Autoexec.bat文件。该函数不支持长文件名。在将长文件名传递到PathFind前调用LongPathToShortPath将它转换到等价的短文件名。
参数:
svString
返回路径缓冲中的内容。
返回值:
0:表明函数成功检索当前保存在路径缓冲中的路径。
< 0:表明函数未能检索当前保存在路径缓冲中的路径。
注解:
PathGet从路径缓冲中检索查找路径并释放分配给路径缓冲的内存。除非通过调用PathSet来重新初始化路径缓冲,否则随后对PathGet的调用将会失败。
14.5  PathMove
语法:PathMove (szDir, szRefDir, bDir, bRefDir, bPosition);
说明:PathMove函数重新定位路径缓冲中的一个目录到另一个位置。你也可以使用该函数来定位一个目录,相对于另一个目录或作为路径字符串中的第一项或最后一项。
    调用PathGet得到路径缓冲中的内容,调用PathSet设置路径缓冲中的内容。该函数和Autoexec.bat文件中的路径语句或路径环境变量无关。它仅作用在路径缓冲,帮助你创建,修改和操作查找路径。然后你可以通过使用不同的批处理文件函数添加该临时路径字符串到Autoexec.bat文件。该函数不支持长文件名。在将长文件名传递到PathMove前调用LongPathToShortPath将它转换到等价的短文件名。
参数:
szDir
指定在路径缓冲中重新定位的完整路径或部分路径。
szRefDir
指定当前路径缓冲中和将要被移动的szDir中的路径相关的路径。为移动szDir中的路径到路径缓冲中路径的开始或结尾,给该参数传递一个空字符串。
bDir
指定szDir是否是一个全限定路径。在该参数位置传递下列预定义常量之一:
FULL:表明szDir包含一个全限定目录名。
PARTIAL:表明szDir仅包含目录名。
bRefDir
指定szRefDir是否是一个全限定路径。在该参数位置传递下列预定义常量之一:
FULL:表明SzRefDir包含一个全限定路径名。
PARTIAL:表明SzRefDir仅包含目录名。
bPosition
指定szDir要被插入到的相对于szRefDir的位置。在该参数位置传递下列预定义常量之一:
AFTER:指定szDir被插入到szRefDir 之后。如果szRefDir指定一个空字符串,szDir被插入到路径缓冲中的路径结尾。
BEFORE:指定szDir被插入到szRefDir 之前。如果szRefDir指定一个空字符串,szDir被插入到路径缓冲中的路径前面。
返回值:
0:表明函数成功在路径缓冲中重新定位一个目录。
< 0:表明函数未能在路径缓冲中重新定位一个目录。
14.6  PathSet
语法:PathSet (szString);
说明:PathSet函数保存一个查找路径字符串到路径缓冲中。然后你可以使用其它路径函数来操作该缓冲。szString的值必须是一个绝对路径。
    该函数和Autoexec.bat文件中的路径语句或路径环境变量无关。它仅作用在路径缓冲,帮助你创建,修改和操作查找路径。然后你可以通过使用不同的批处理文件函数添加该临时路径字符串到Autoexec.bat文件。该函数不支持长文件名。在将长文件名传递到PathSet前调用LongPathToShortPath将它转换到等价的短文件名。
参数:
szString
指定一个要保存在路径缓冲中的查找路径。该查找路径必须是全限定的;也就是它必须包含一个驱动器指示符和到一个目录的完整路径。
返回值:
0:表明函数成功保存一个查找路径到路径缓冲中。
< 0:表明函数未能保存一个查找路径到路径缓冲中。

InstallShield内部库函数全集一(15)

InstallShield内部库函数全集一(15)
15.注册表函数
下列函数允许你访问注册表,读、创建和删除注册表项,和为卸载建立注册表相关参数。
CreateCreateInstallationInfo
为你安装的程序创建一个应用程序信息项和一个每应用程序路径项。
CreateRegistrySet
创建在资源窗格的注册表入口文件夹中指定注册表入口的一组或所有组。
DeinstallSetReference
指定在卸载进程开始前要检测的参考文件。
DeinstallStart
创建应用程序卸载项和设置该项下的[UninstallString]值。
InstallationInfo
根据公司名、产品名和产品版本号来创建注册表项。
MaintenanceStart
通过创建注册表项来激活卸载功能。
RegDBConnectRegistry
打开到一个远程注册表的连接。
RegDBCreateKeyEx
在注册表中创建一项。也允许你将一个类对象和一个注册表项联系起来(仅对高级用户)。
RegDBDeleteKey
从注册表中删除指定项。
RegDBDeleteValue
从一个指定注册表项中删除一个值。
RegDBDisConnectRegistry
关闭到一个远程注册表的连接。
RegDBGetAppInfo
在一个应用程序信息项下检索一个值。
RegDBGetItem
在每应用程序路径项或应用程序卸载项下检索值。
RegDBGetKeyValueEx
从注册表的一项中检索一个值。
RegDBKeyExist
检测注册表项的存在。
RegDBQueryKey
对一项的子项和值名进行排队。
RegDBSetAppInfo
设置应用程序信息项下的一个值。
RegDBSetDefaultRoot
设置开关键。
RegDBSetItem
在每应用程序路径项或应用程序卸载项下赋值。
RegDBSetKeyValueEx
设置注册表入口。
SetInstallationInfo
指定CreateInstallationInfo使用的公司和产品信息。
15.1  CreateRegistrySet
语法:CreateRegistrySet (szRegistrySet);
说明:CreateRegistrySet函数创建由当前媒体中的一个或所有注册表组指定的注册表信息。当前媒体的名称保存在系统变量MEDIA中。一个注册表组可以和一个文件组相联系,因此仅当文件组已经被安装到目标系统上时,对CreateRegistrySet的调用才创建注册表组。如果你正使用一个基于事件的脚本,任何和一个或多个文件组相联系的注册表组(使用注册表组的文件组属性)当安装那些文件组的任何一个时,它都被自动创建。
参数:
SzRegistrySet
指定当前媒体上的注册表组名。为创建所有当前媒体上定义的注册表组,给该参数传递一个空字符串。
返回值:
0:表明函数成功。
-7:创建一项失败。
-8:不能设置一个注册表项的值。
-9:文本替换失败。
-10:内存溢出。
-11:未能从字符串表中取得一个值。
-12:该函数在当前媒体上调用ComponentTransferData之前被调用。注意ComponentTransferData在一个运行基于事件的脚本的安装中被自动调用。
-13:未知错误。
注解:
?系统变量MEDIA的值在安装初始化过程中被设置为‘DATA’。如果你修改该变量的值来指向一个脚本创建的组件组,则你在调用CreateRegistrySet之前必须把值修改回‘DATA’。
?该函数仅在已经调用ComponentTransferData后才能被调用。
15.2  CreateInstallationInfo
语法:CreateInstallationInfo ( );
说明:在一个基于事件的脚本中,CreateInstallationInfo函数在First UI Before事件之后被自动调用。它使用已经由SetInstallationInfo指定的信息来创建你正在安装的程序的一个应用程序信息项和每应用程序路径项。应用程序信息项作为调用InstallationInfo的结果立即被创建。每应用程序路径项则直到随后调用RegDBSetItem设置该项下的一个[Path] 或 [DefaultPath]值后才被创建。
    CreatInstallationInfo提供显示在欢迎对话框中的产品名,也提供MaintenanceStart使用来初始化卸载日志文件的公司名,产品名和版本号。如果脚本中在MaintenanceStart 之前没有调用CreateInstallationInfo,则MaintenanceStart将失败。在一个安装中只能调用CreateInstallationInfo一次。如果你运行多个使用DoInstall的安装,每个安装当然可以有它自己的对CreateInstallationInfo的调用。CreateInstallationInfo是一个特殊的注册表相关函数,设计为处理特定的预定义注册表项。
参数:
无。
返回值:
0:表明函数成功。
< 0:表明函数未能创建一个或多个注册表项。
注解:
?你必须在调用下列要使用由SetInstallationInfo提供的信息的函数之前调用CreateInstallationInfo:RegDBSetAppInfo, RegDBGetAppInfo, RegDBSetItem, RegDBGetItem。更多信息可查看这些函数的说明。
?由传递给SetInstallationInfo的值指定的每应用程序路径项直到调用RegDBSetItem设置该项下的值之后才真正被创建。
DeinstallSetReference
语法:DeinstallSetReference (szReferenceFile);
说明:指定在卸载进程开始前要检测的参考文件。如果该文件正被使用,卸载不执行。最终用户必须关闭使用该文件的进程并再开始卸载。你必须在调用DeinstallSetReference前调用DeinstallStart。
因为Windows和 Windows应用程序中的特定限制,在很少情况下一个由DeinstallSetReference指定的文件可能看似被锁定。
参数:
szReferenceFile
指定在卸载进程开始前要检测的文件的全限定名。该文件是只被要卸载的应用程序使用的一个程序或一个DLL。
返回值:
0:表明函数成功。
< 0:表明函数失败。
注解:
?为指定要检测的多个文件,可为每个文件调用该函数。不要指定一个正被操作系统或其它应用程序使用的文件;如果你这么做,最终用户将不能继续卸载。
15.4  DeinstallStart
语法:DeinstallStart (szObsolete, svObsolete, szObsolete, lReserved);
说明:DeinstallStart函数仅支持和由InstallShield先前版本创建的脚本兼容。我们建议你使用MaintenanceStart函数来代替。
DeinstallStart函数通过在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ CurrentVersion\Uninstall\<PRODUCT_GUID>下创建下列值来激活卸载功能:
UninstallString  系统变量UNINST的值
DisplayName  传递给InstallationInfo第二个参数的值
LogFile  <DISK1TARGET>\Setup.ilg
DeinstallStart在一个安装脚本中必须只被执行一次。然而,如果你运行多个使用DoInstall的脚本,那么你可以在一个安装中调用DeinstallStart多次,因为每个单个脚本可以调用DeinstallStart一次。
参数:
szObsolete
该参数的值被忽略。
svObsolete
你必须给该参数传递一个字符串值。不返回有用信息。
szObsolete
该参数的值被忽略。
lReserved
给该参数传递0。不允许其它值。
返回值:
0:表明函数成功创建注册表项值。
< 0:表明函数未能创建一个或多个注册表项值。
注解:
?RegDBSetItem 和 RegDBGetItem函数设置和检索应用程序卸载项下的卸载图标名([DisplayName]值),它由调用DeinstallStart函数创建。因此,根据要被设置或检索的值,RegDBSetItem和 RegDBGetItem要求在它们被使用之前调用DeinstallStart。
?在调用任何使用SHAREDFILE或 LOCKEDFILE选项的函数前,并在调用SdFinishReboot前,应用程序信息项必须用InstallationInfo创建,应用程序卸载项必须用DeinstallStart函数创建。
?Enable(LOGGING)激活记录卸载信息。缺省时它被激活;你需要调用Enable(LOGGING)仅更正前一个Disable(LOGGING)调用的影响。
15.5  InstallationInfo
语法:InstallationInfo (szCompany, szProduct, szVersion, szProductKey);
说明:InstallationInfo函数指定一个公司名,一个产品名,一个产品版本号和一个程序可执行文件名。你指定的信息被用来为你安装的程序创建一个应用程序信息项和一个每应用程序路径项。应用程序信息项作为调用InstallationInfo的结果立即被创建。每应用程序路径项则直到随后调用RegDBSetItem设置该项下的一个[Path] 或 [DefaultPath]值后才被创建。
    InstallationInfo提供显示在欢迎对话框中的产品名。InstallationInfo提供DeinstallStart使用来初始化卸载日志文件的公司名,产品名和版本号。如果脚本中在DeinstallStart 之前没有调用InstallationInfo,则DeinstallStart将失败。
    在一个安装中只能调用InstallationInfo一次。如果你运行多个使用DoInstall的安装,每个安装当然可以有它自己的对InstallationInfo的调用。
InstallationInfo是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
szCompany
指定公司名。InstallShield使用szCompony来在注册表中的[HKEY_LOCAL_MACHINE] \Software项下创建一个\<company>项。
szProduct
指定要被安装的产品名。InstallShield使用szProduct来在注册表中的[HKEY_LOCAL_ MACHINE]\Software\<company>项下创建一个\<product>项。SzProduct的值也被插入到欢迎对话框中的消息文本的第一段中。
szVersion
指定产品的版本号。InstallShield使用szVersiont来在注册表中的[HKEY_LOCAL_MACHINE] \Software\<company>\<product>项下创建一个\<version>项。合在一起,\<company>项 (szCompany), \<product> 项(szProduct), 和\<version> 项(szVersion)被指定为应用程序信息项。应用程序信息项在调用InstallationInfo时立即被创建。
szProductKey
应用程序的主可执行文件的文件名。如果你使用几个可执行文件,指定最能代表产品的可执行文件。InstallShield 使用szProductKey来在项[HKEY_LOCAL_MACHINE]\Software \Microsoft\Windows\CurrentVersion\App Paths下创建一个每应用程序路径项。每应用程序路径项知道你调用RegDBSetItem创建该项下的一个数值名和数值数对后才真正在注册表中被创建。
返回值:
0:表明函数成功。
< 0:表明函数未能如设置那样使用参数。确认你使用了正确的语法。该函数的任何参数都不允许空字符串。
注解:
?你必须在调用下列函数之前调用InstallationInfo,因为它们使用InstallationInfo提供的信息:RegDBSetAppInfo, RegDBGetAppInfo, RegDBSetItem, RegDBGetItem。更多信息请查看这些函数的说明。
?由传递给InstallationInfo的值指定的每应用程序路径项直到调用RegDBSetItem设置该项下的值之后才真正被创建。
15.6  MaintenanceStart
语法:MaintenanceStart ( );
说明:MaintenanceStart函数创建在维护安装或卸载的初始化过程中使用的一个注册表项和相应值,并为添加/删除程序对话框提供应用程序信息。如果你使用一个基于事件的脚本,MaintenanceStart在First UI Before事件后被自动调用。
MaintenanceStart在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows \CurrentVersion\Uninstall\<PRODUCT_GUID>下创建下列值:
UninstallString  系统变量UNINSTALL_STRING的值。
DisplayName  传递给SetInstallationInfo 或 InstallationInfo的第二个参数的值。
  (SetInstallationInfo函数在Begin事件之前被自动调用,它的第二个参数等于PRODUCT_NAME字符串表入口。)
LogFile  <DISK1TARGET>\Setup.ilg 
参数:
无。
返回值:
0:表明函数成功创建注册表项和它相应值。
< 0:表明函数未能创建注册表项和它相应值。
15.7  RegDBConnectRegistry
语法:RegDBConnectRegistry (szRemoteSystem, nKeyType, nReserved);
说明:RegDBConnectRegistry函数创建一个到一个远程注册表的连接。如果你试图打开一个远程Windows NT 系统的注册表,你必须拥有管理员的特权。如果你试图打开一个远程Windows 95 和更高的系统的注册表,则必须已经激活了远程管理。该函数是给系统管理员使用来进行网络安装的。
    一旦你已经打开了连接,你可以象对一个本地注册表一样对一个远程注册表进行创建、删除或检索注册表项、数值名和数值对。RegDBConnectRegistry允许你每次打开远程注册表时只编辑一个注册表开关键,你只可以编辑HKEY_LOCAL_MACHINE 或 HKEY_USERS下的项和值。当你调用RegDBConnectRegistry时,你必须指定你希望能编辑哪个开关键。如果你想要编辑另一个开关键或它的一个子项,你必须关闭并重新打开该连接。
为编辑一个远程注册表,你必须只使用通用注册表相关函数(如下所列),它们被设计为可以处理所有注册表项:
RegDBCreateKeyEx、RegDBDeleteKey、RegDBDeleteValue、RegDBGetKeyValueEx
RegDBKeyExist、RegDBQueryKey、RegDBSetKeyValueEx
参数:
szRemoteSystem
指定要连接的系统名,如”RemoteSys”。
nKeyType
指定下列常量之一:
HKEY_LOCAL_MACHINE 或 HKEY_USERS.
nReserved
给该参数传递0。不允许其它值。
返回值:
0:表明函数成功建立一个到系统注册表的连接。
REGDB_ERR_CONNECTIONEXISTS (-6):一个到一个远程注册表的连接早已存在。在你再次调用RegDBConnectRegistry之前必须用RegDBDisConnectRegistry关闭它。
REGDB_ERR_CORRUPTEDREGISTRY (-4):表明远程注册表被破坏,不能被访问。
REGDB_ERR_INITIALIZATION (-2):表明注册表服务不能被初始化。确认远程管理已经被激活并且你有可以写注册表的适当特权。
REGDB_ERR_INVALIDHANDLE (-5):提供给远程注册表的项名不被允许。
REGDB_ERR_INVALIDNAME (-3):表明在szRemoteSystem中的系统不能被找到。检查名称并重试。
-1:其它错误。
注解:
?自从你通过调用RegDBConnectRegistry设置了开关键,一旦你已经建立了一个到远程注册表的连接,你就不能调用RegDBSetDefaultRoot。一旦你已经调用了RegDBDisConnectRegistry,所有对注册表相关函数的调用都会影响本地注册表,并且然后你可以调用RegDBSetDefaultRoot来修改开关键。
?在一个卸载中,InstallShield将卸载为存入卸载记录中的任何项下的所有项。由InstallShield自动创建的项将为存入卸载记录。当你调用RegDBSetKeyValueEx创建项,在这些项以上没有存入卸载记录的项,你的项不会被卸载掉,不管存入是否被激活(你可以Enable和Disable登记)。然而,当你调用RegDBCreateKeyEx来创建一个项,当存入被激活时,该项上没有存入卸载记录的项,你的项会存入卸载记录。当存入项被删除时,你创建在该项下的所有项会被卸载。更多信息可查询各个函数的说明。
15.8  RegDBCreateKeyEx
语法:RegDBCreateKeyEx (szKey, szClass);
说明:RegDBCreateKeyEx函数创建注册表中的一项。你也可以将一个类对象和新创建的项联系起来(仅对高级用户)。新创建的项没有一个和它相联系的值。除非你另外指定,InstallShield将该项创建为HKEY_CLASSES_ROOT的子项。你可以使用RegDBSetDefaultRoot来指定一个不同的开关键。
    在一个项-子项表达式中用一个双反斜杠来分隔不同层。如果它们不存在时,InstallShield将立即创建所有层。
  当存入功能被激活时,由RegDBCreateKeyEx创建的项存入卸载记录。然而,记住在一个多项表达式如Key1\Key2\Key3中,RegDBCreateKeyEx识别Key3为该函数调用所关系的项。如DOS命令DIR C:\Windows\System列出 Windows系统文件夹中的文件,而不是Windows文件夹中的。因此,Key3将被存入到卸载记录,但Key1和Key2不会。有关Windows 系统文件夹的信息,请查阅InstallShield 系统变量WINSYSDIR的文档。
  为在RegDBCreateKeyEx创建一个项和子项时确保正确地存入卸载记录,首先创建父项(存入功能激活时)。当项的链中父项或高层项被创建后,然后创建父项下的子项。被各自创建的父项的下面所有子项当父项被卸载时也会被卸载。
例如,为确保Key1和所有它的子项会被卸载,首先当存入被激活时用RegDBCreateKeyEx创建Key1。然后你可以在一个单独的函数调用中或在各自的函数调用中创建Key2,Key3等等项。当Key1被卸载,它下面的所有子项将被卸载。
  记住当一个项被卸载时,它的所有子项也被卸载。因此,如果你使用RegDBCreateKeyEx来创建一个已经被存入卸载记录的项下的项,那么当更高层的项被卸载时你所创建的项也被卸载,不管当你创建你的项时存入功能是否被激活,也不管你以什么次序创建你的项。
  如果你正用RegDBCreateKeyE创建的项已经存在并且你没有禁用存入功能,则其它应用程序使用的项将被存入卸载记录。在一个卸载过程中,该项将被卸载,这给那些使用该项的应用程序造成问题。为避免该问题,在创建一个项前用RegDBKeyExist来检测它的存在性。如果该项已经存在,使用RegDBCreateKeyEx来创建一个对你的应用程序唯一的子项。然后,当卸载发生时,只有子项被删除。如果你不希望首先检测项的存在性,当你创建该项时,你可以使用Disable函数来禁用存入功能。在项被创建后再激活存入功能。然而,记住该项不会和你的应用程序一个被卸载。
RegDBCreateKeyEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szKey
指定要在四个开关键中的一个之下创建的项的名称。用一个双反斜杠来分隔子项中的不同层。
szClass
指定和该项相联系的类名。
返回值:
0:表明函数成功创建该子项。
< 0:表明函数未能创建该子项。
注解:
?Windows NT 4.0不允许在HKEY_LOCAL_MACHINE下直接创建一个项。
15.9  RegDBDeleteKey
语法:RegDBDeleteKey (szSubKey);
说明:RegDBDeleteKey函数从注册表中删除一个特定项和与它相联系的值。被删除项的所有子项及与它们相联系的值也被删除。
    InstallShield假定由szSubKey指定的项是HKEY_CLASSES_ROOT的一个子项。你可以使用RegDBSetDefaultRoot来指定另一个开关键。
RegDBDeleteKey是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szSubKey
指定要删除的项的名称。用一个双反斜杠来分隔子项中的不同层。
返回值:
0:表明函数成功删除该项。
< 0:表明函数未能删除该项。
15.10  RegDBDeleteValue
语法:RegDBDeleteValue (szSubKey, szValue);
说明:RegDBDeleteValue函数从一个注册表的一个特定项中删除一个值。InstallShield假定由szSubKey指定的项是HKEY_CLASSES_ROOT的一个子项。你可以使用RegDBSetDefaultRoot来指定另一个开关键。
参数:
szSubKey
指定注册表项的名称,该项包含要删除的值名。用一个双反斜杠来分隔子项中的不同层。
szValue
指定你要删除的值的名称。
返回值:
0:表明函数成功删除该值。
< 0:表明函数未能删除该值。
15.11  RegDBDisConnectRegistry
语法:RegDBDisConnectRegistry (nReserved);
说明:RegDBDisConnectRegistry函数关闭调用RegDBConnectRegistry建立的到一个远程注册表的一个连接。
    调用RegDBDisConnectRegistry后,所有对安装脚本注册表相关函数的调用都会影响本地系统注册表。更多信息请查阅特殊注册表相关函数。
参数:
nReserved
给该参数传递0。不允许其它值。
返回值:
0:表明函数成功关闭一个到远程系统上的注册表的连接。
< 0:表明函数未能关闭注册表连接。
15.12  RegDBGetAppInfo
语法:RegDBGetAppInfo (szName, nvType, svValue, nvSize);
说明:RegDBGetAppInfo函数从注册表中检索你的主应用程序的应用程序信息项下的一个特定数值名的值。应用程序信息项由InstallShield创建,作为调用InstallationInfo的结果。在调用RegDBGetAppInfo之前,你必须调用InstallationInfo来创建一个应用程序信息项。
RegDBGetAppInfo是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
szName
指定要检索的值的数值名。
nvType
返回下列预定义常量之一,它们标识在svValue返回的数据的类型:
REGDB_STRING:字符串变量,不允许换行符。
REGDB_STRING_EXPAND:字符串变量保持一种可扩展的环境变量表达式,如”%MYPATH%”。
REGDB_STRING_MULTI:字符串变量,允许换行符。
REGDB_NUMBER:看作为一个字符串的数字表达式,并可传递给字符串变量。
REGDB_BINARY:将二进制数据保存在一个字符串中。
svValue
返回由szName指定的数值名的值。
nvSize
以字节数返回返回值的大小。
返回值:
0:表明函数成功检索该值。
< 0:表明函数未能检索该值。
15.13  RegDBGetItem
语法:RegDBGetItem (nItem, svValue);
说明:RegDBGetItem函数根据nItem的值检索每应用程序路径项或应用程序卸载项下的值。这些项InstallShield 创建,作为调用InstallationInfo的结果。在调用RegDBGetItem之前,你必须调用InstallationInfo来创建一个应用程序信息项。
RegDBGetItem是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
nItem
指定要检索的项。在该参数位置传递下列预定义常量之一:
REGDB_APPPATH:每应用程序路径项下[Path]的值。
REGDB_APPPATH_DEFAULT:每应用程序路径项下[DefaultPath]的值。
REGDB_UNINSTALL_NAME:卸载项下[DisplayName]的值。当该常量被使用时,szValue指定显示在控制面板中可卸载应用程序列表中的应用程序名。
svValue
返回该项的值。
返回值:
0:表明函数成功检索该项目的值。
< 0:表明函数未能检索该项目的值。确认你在使用该函数之前使用了InstallationInfo函数。
注解:
?在调用RegDBGetItem函数(nItem为REGDB_APPPATH 或 REGDB_APPPATH_DEFAULT选项)前,你必须用InstallationInfo函数创建每应用程序路径项。在调用RegDBGetItem函数(nItem为REGBD_UNINSTALL_NAME)前,你必须调用DeinstallStart函数来创建卸载项,并给应用程序卸载项下的[DisplayName]赋一个值。
15.14  RegDBGetKeyValueEx
语法:RegDBGetKeyValueEx (szKey, szName, nvType, svValue, nvSize);
说明:RegDBGetKeyValueEx函数检索注册表中一个指定项下一个特定数值名的值。缺省时,InstallShield假定该项是HKEY_CLASSES_ROOT下的一个子项。你可以用RegDBSetDefaultRoot来指定另一个开关键。
RegDBGetKeyValueEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szKey
指定其值要被检索的项的名称。用一个双反斜杠来分隔子项中的不同层。
szName
指定在szKey下其值要被检索的数值的数值名。要检索项的缺省值,则传递一个空字符串。
nvType
返回下列预定义常量之一,它们标识在svValue返回的数据的类型:
请参阅15.12中该部分的说明。
svValue
返回由szKey和svName 指定的值。注意一个数值型值以一个字符串返回。
nvSize
以字节数返回在svValue返回的值的大小。
返回值:
0:表明函数成功检索该值。
< 0:表明函数未能检索该值。
注解:
一个Windows NT平台上,当检索REGDB_STRING_MULTI数据类型时,带空字符串为参数调用StrGetTokens来将多个以空字符串为中止的字符串分析到一个字符串列表。也就是,如果svValue在调用RegDBGetKeyValueEx后有多个结果字符串,StrGetTokens( listID, svValue, ””)可以被使用来分析字符串并把它们放到一个由listID指向的字符串列表。
15.15  RegDBKeyExist
语法:RegDBKeyExist (szSubKey);
说明:RegDBKeyExist函数检测注册表中一个特定项的存在性。缺省时,InstallShield假定该项是HKEY_CLASSES_ROOT下的一个子项。你可以用RegDBSetDefaultRoot来指定另一个开关键。
RegDBKeyExist是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szSubKey
指定要查找的项的名称。你不必要在该参数包括HKEY_CLASSES_ROOT项(或你指定的其它项)。用一个双反斜杠来分隔子项的不同层。
返回值:
1:表明函数成功找到注册表中的项。
< 0:表明函数未能找到注册表中的项。
15.16  RegDBQueryKey
语法:RegDBQueryKey (szSubKey, nItem, listResults);
说明:RegDBQueryKey函数允许用户排队一个项的子项和值名。使用该函数可以在运行时动态列举这些项。
RegDBQueryKey是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szSubKey
指定先前调用RegDBSetDefaultRoot设置的开关键中某一个的子项。使用反斜杠来指定子项的更深层。为检索开关键,传递一个空字符串。
nItem
指定必须被放置在列表中的项目。在该参数位置传递下列预定义常量之一:
REGDB_KEYS:在listResult 返回的字符串列表将包含一个该项下的所有子项的列表。
REGDB_NAMES:在listResult 返回的字符串列表将包含该项的所有命名值的名。
listResults
返回在一个字符串列表中排队的结果。由listResult标识的列表必须已经通过调用ListCreat而被初始化。
返回值:
0:表明函数成功。
< 0:表明函数失败。
15.17  RegDBSetAppInfo
语法:RegDBSetAppInfo (szName, nType, szValue, nSize);
说明:RegDBSetAppInfo函数设置注册表中应用程序信息项下的一个特定数值名的值。你在调用RegDBSetAppInfo前必须调用InstallationInfo来创建一个应用程序信息项。
RegDBSetAppInfo是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
szName
指定其信息要被设置的数值名。
nType
指定你要设置的数据的类型,在该参数位置传递下列预定义常量之一:
请参阅15.12中该部分的说明。
szValue
指定为数值名设置的值。
nSize
以字节数返回传递给RegDBSetAppInfo的数据的大小。给该参数传递-1来表明InstallShield应该确定该数据的大小。
返回值:
0:表明函数成功给数值名赋值。
< 0:表明函数未能赋值。
15.18  RegDBSetDefaultRoot
语法: RegDBSetDefaultRoot (nRootKey);
说明:RegDBSetDefaultRoot函数设置一个被其它注册表函数使用的开关键。大多数InstallShield注册表函数工作在以HKEY_CLASSES_ROOT为注册表树的缺省根。使用该函数,你可以指定另一个项,如HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER 或 HKEY_USERS为开关键。
RegDBGetKeyValueEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
你可以使用RegDBSetDefaultRoot来修改使用特殊注册表相关函数创建或处理项的开关键。
参数:
nRootKey
指定设置为开关键的项的名。
返回值:
0:表明函数成功设置项。
< 0:表明函数未能设置项。
注解:
?Windows NT 4.0不允许在HKEY_LOCAL_MACHINE下直接创建一个项。
15.19  RegDBSetItem
语法:RegDBSetItem (nItem, szValue);
说明:RegDBSetItem函数给每应用程序路径项或应用程序卸载项下赋值,根据nItem的值而定。以REGDB_APPPATH或 REGDB_APPPATH_DEFAULT选项调用RegDBSetItem则结果创建每应用程序路径项。注意你必须在调用RegDBSetItem之前调用InstallationInfo来创建这些项。
RegDBSetItem是一个特殊的注册表相关函数,被设计来处理特定的预定义注册表项。
参数:
nItem
指定要设置的项目(条目)。在该参数位置传递下列预定义常量之一:
REGDB_APPPATH:在每应用程序路径项下的[Path]值。
REGDB_APPPATH_DEFAULT:在每应用程序路径项下的[DefaultPath]值。
REGDB_UNINSTALL_NAME:卸载项下的[DisplayName]值。当使用该常量时,szValue指定在控制面板中卸载应用程序列表中的显示的应用程序名。
szValue
指定赋给指定项目的值。
返回值:
0:表明函数成功设置值。
< 0:表明函数失败。最通常的失败原因是没有前调用InstallationInfo函数。该函数只有在你调用InstallationInfo后才能被执行。
注解:
?在使用REGDB_APPPATH 或REGDB_APPPATH_DEFAULT选项(它们将影响创建每应用程序路径项,也影响在其下写一个值)调用RegDBSetItem函数之前,你必须调用InstallationInfo函数来提供被使用来创建该项的信息。
?当你调用MaintenanceStart 或DeinstallStart函数时,[UninstallString]值被创建。
15.20  RegDBSetKeyValueEx
语法:RegDBSetKeyValueEx (szKey, szName, nType, szValue, nSize);
说明:RegDBSetKeyValueEx函数设置注册表中一个项下指定的数值名的值。如果该项不存在,RegDBSetKeyValueEx将会为你创建它。然而,新创建的项不会存入卸载记录除非它是一个已经存入卸载记录的项的子项。如下情况项会存入卸载记录:
当它们使用RegDBCreateKeyEx而被创建。
当存入功能被激活时。
当它们在安装进程中由InstallShield自动被创建。
当它们作为调用一个特殊注册表相关函数的结果而被创建。
如果数值名不存在,RegDBSetKeyValueEx创建它。如果数值数已经存在,RegDBSetKeyValueEx改写它。InstallShield假定szKey中的数值名是HKEY_CLASSES_ROOT项的一个子项。如果你想要使用一个不同的主项,则使用RegDBSetDefaultRoot函数来设置该主开关键。
RegDBSetKeyValueEx是一个通用注册表相关函数,设计为可工作于所有注册表项,包括那些由特殊注册表相关函数处理的项。
参数:
szKey
指定要设置的项的名;该项必须已经由RegDBCreateKeyEx创建。你不必要在该参数包括HKEY_CLASSES_ROOT项(或你指定的其它项)。用一个双反斜杠来分隔子项的不同层。
szName
指定要被设置的数值数的数值名。为设置在szKey指定的项的缺省值,给该参数传递一个空字符串。
nType
指定你要设置的数据的类型,在该参数位置传递下列预定义常量之一:
请参阅15.12中该部分的说明。
szValue
指定和数值名相联系的值。所有值必须以字符串变量传递。数字必须表示为字符串(InstallShield内部将它们转换为数字)。
nSize
以字节数指定要被设置的数据的大小。当nType是REGDB_STRING, REGDB_STRING_EXPAND, 或 REGDB_NUMBER时,你可以将该参数指定为-1,InstallShield会设置其大小。然而,当nType为REGDB_BINARY和 REGDB_STRING_MULTI时,你必须总指定你在保存的二进制数据的字节数。
返回值:
0:表明函数成功设置该项。
< 0:表明函数未能设置该项。
15.21  SetInstallationInfo
语法:SetInstallationInfo (szCompany, szProduct, szVersion, szProductKey);
说明:在一个基于事件的脚本中,SetInstallationInfo函数在 Begin事件之前被自动调用,以字符串表表目COMPANY_NAME, PRODUCT_NAME, PRODUCT_VERSION, 和 PRODUCT_KEY为其参数。SetInstallationInfo指定该信息由CreateInstallationInfo(它在一个基于事件脚本中就在First UI Before事件后被自动调用来创建你正在安装的程序的一个应用程序信息项和一个每应用程序路径项)使用。
SetInstallationInfo是一个特殊注册表相关函数,设计为可工作于特定预定义的注册表项。
参数:
szCompany
指定公司名。CreateInstallationInfo使用szCompany来创建注册表中[HKEY_LOCAL_ MACHINE]\Software项下的\<company>项。
szProduct
指定被安装的产品的名称。CreateInstallationInfo使用szProduct来创建注册表中[HKEY_LOCAL_MACHINE]\Software\<company>项下的\<product>项。SzProduct的值也被插入到欢迎对话框中消息文本的第一段中。
szVersion
指定产品的版本号。InstallShield使用szVersiont来在注册表中的[HKEY_LOCAL_MACHINE] \Software\<company>\<product>项下创建一个\<version>项。合在一起,\<company>项 (szCompany), \<product> 项(szProduct), 和\<version> 项(szVersion)被指定为应用程序信息项。应用程序信息项在调用InstallationInfo时立即被创建。
szProductKey
应用程序的主可执行文件的文件名。如果你使用几个可执行文件,指定最能代表产品的可执行文件。InstallShield 使用szProductKey来在项[HKEY_LOCAL_MACHINE]\Software \Microsoft\Windows\CurrentVersion\App Paths下创建一个每应用程序路径项。每应用程序路径项知道你调用RegDBSetItem创建该项下的一个数值名和数值数对后才真正在注册表中被创建。
返回值:
该函数总返回0。

——————————————————————
公告栏
———————————
留言板
———————————
看广告玩游戏送QQ币

InstallShield内部库函数全集一(16)

InstallShield内部库函数全集一(16)
16.列表处理函数
列表被使用来保存相关信息组。在InstallShield中,有两类列表:字符串列表和数字列表。提供两组函数来处理列表:每个处理一种类型。以”Item”结尾的列表函数处理数字列表。以”String”结尾的列表函数处理字符串列表。你不能将数字列表函数使用到字符串列表,反之亦然。下面是在一个安装脚本中处理列表的函数。
ListAddItem
添加一项到一个列表。
ListAddString
添加一个字符串到一个列表。
ListCount
返回在一个指定列表中字符串或数值型元素的数目。
ListCreate
创建一个新的字符串或数字列表。
ListCurrentItem
返回一个列表中的当前项目。
ListCurrentString
返回一个列表中的当前字符串。
ListDeleteItem
删除一个列表中当前项目。
ListDeleteString
删除一个列表中的当前字符串。
ListDestroy
消除一个列表。
ListFindItem
使指定项目成为一个数字列表中的当前项目。
ListFindString
使指定项目成为一个字符串列表中的当前项目。
ListGetFirstItem
从一个数字列表中检索第一个元素。
ListGetFirstString
从一个字符串列表中检索第一个元素。
ListGetNextItem
从一个数字列表中检索当前元素后的元素。
ListGetNextString
从一个字符串列表中检索当前元素后的元素。
ListReadFromFile
读一个文本文件到一个列表。
ListSetCurrentItem
设置一个数字列表中的当前元素。
ListSetCurrentString
设置一个字符串列表中的当前元素。
ListSetIndex
使用一个索引来设置一个列表的当前元素。
ListWriteToFile
写一个字符串列表到一个文件。
16.1  ListAddItem
语法:ListAddItem (listID, nItem, nPlacementFlag);
说明:ListAddItem函数将一个数值型元素添加到一个数字列表中当前元素的前面或后面。为遍历一个列表,首先调用ListGetFirstItem得到列表的第一个元素;然后重复调用ListGetNextItem直到你到达列表尾。为使列表中的一个特定元素成为当前元素,调用ListSetIndex。
参数:
listID
指定一个数字列表的名称。由listID标识的列表必须早已由ListCreate函数初始化。
nItem
指定要添加到列表中的数值型元素。
nPlacementFlag
指定在哪儿放置和当前元素相关的nItem。新元素可以在当前元素之前或之后。在该参数位置传递下列预定义常量之一:
AFTER:将新元素添加到列表中当前元素之后。
BEFORE:将新元素添加到列表中当前元素之前。
返回值:
0:ListAddItem成功添加元素到一个数字列表。
< 0:ListAddItem未能添加元素到一个数字列表。
注解:
?ListAddItem仅工作于数字列表。
16.2  ListAddString
语法:ListAddString (listID, szString, nPlacementFlag);
说明:ListAddString函数添加一个字符串到一个字符串列表中当前元素之前或之后。为遍历一个列表,首先调用ListGetFirstItem得到列表的第一个元素;然后重复调用ListGetNextItem直到你到达列表尾。为使列表中的一个具体元素成为当前元素,调用ListSetIndex。
参数:
listID
指定一个字符串列表的名称。由listID标识的列表必须早已由ListCreate函数初始化。
szString
指定添加到列表中的字符串。
nPlacementFlag
指定在哪儿放置和当前元素相关的szString。新字符串可以在当前元素之前或之后。在该参数位置传递下列预定义常量之一:
AFTER:将新字符串添加到列表中当前元素之后。
BEFORE:将新字符串添加到列表中当前元素之前。
返回值:
0:ListAddString成功添加字符串到列表。
< 0:ListAddString未能添加字符串到列表。
注解:
?ListAddString仅工作于字符串列表。
16.3  ListCount
语法:ListCount (listID);
说明:ListCount函数返回一个列表中的元素数目。
参数:
listID
指定一个字符串或数字列表的名称。
返回值:
>= 0:列表中的项目数。
< 0:ListCount未能确定列表中的元素数。
注解:
?该函数工作于字符串和数字列表。
16.4  ListCreate
语法:ListCreate (nListType);
说明:ListCreate函数创建一个空的字符串或数字列表。记住一个列表不能包括两个类型的元素。InstallShield提供不同的函数组来工作于字符列表和数字列表。你必须不能将一个数字列表的ID用于字符串列表函数,反之亦然。以”Item”结尾的列表函数处理数字列表。以”String”结尾的列表函数处理字符串列表。
    当你不再需要列表时,你可以用ListDestroy函数来消除列表。每个列表都有一个指针来标识一个元素为列表的当前元素。不同的列表函数重新定位列表的当前元素。调用任何列表函数时,你必须给该函数传递列表的一个有效ID。确定该函数创建列表成功。否则,所有列表函数因无效列表而失败。
参数:
nListType
指定要创建的列表类型。在该参数位置传递下列预定义常量之一:
NUMBERLIST:指定一个数字列表。
STRINGLIST:指定一个字符串列表。
返回值;
ListID:新创建的空列表的ID。无论何时你要在其它InstallShield列表函数中使用该列表,你都必须使用该ID。你必须检测该变量并确认函数没有返回LIST_NULL。
LIST_NULL (-1):表明InstallShield未能创建一个列表。那是一个严重内存问题的结果,这是很少见的一种情况。有这样的内存问题时你要继续安装可能会很困难。
注解:
?在你传递一个有效列表ID给任何需要一个列表的函数时,你必须使用ListCreat创建该列表。你可以在一个脚本中创建任意个列表。一个列表可能包含任意个元素。唯一的限制是有效空闲内存的大小。
16.5  ListCurrentItem
语法:ListCurrentItem (listID, nvItem);
说明:ListCurrentItem函数从listID指定的数字列表中检索当前元素。
参数:
listID
指定一个数字列表。
nvItem
返回列表中当前元素的值。
返回值;
0:表明函数成功在一个数字列表中检索当前元素。
< 0:表明函数未能在一个数字列表中检索当前元素。
END_OF_LIST (1):表明列表为空因而没有一个当前元素。
注解:
?该函数仅工作于数字列表。
?你也可以使用ListGetFirstItem 和ListGetNextItem函数来遍历列表并使任何元素为当前元素。
16.6  ListCurrentString
语法:ListCurrentString (listID, svString);
说明:ListCurrentString函数从listID指定的字符串列表中检索当前元素。
参数:
listID
指定一个字符串列表。
svString
返回列表当前元素的值。
返回值:
0:表明函数成功在一个字符串列表中检索当前元素。
< 0:表明函数未能在一个字符串列表中检索当前元素。
END_OF_LIST (1):表明列表为空因而没有一个当前元素。
注解:
?该函数仅工作于字符串列表。
?你也可以使用ListGetFirstString 和ListGetNextString函数来遍历列表并使任何元素为当前元素。
16.7  ListDeleteItem
语法:ListDeleteItem (listID);
说明:ListDeleteItem函数从你在listID指定的数字列表中删除当前元素。
参数:
listID
指定从中删除当前元素的数字列表。
返回值:
0:表明函数从一个数字列表中成功删除当前元素。
< 0:表明函数未能从一个数字列表中删除当前元素。
END_OF_LIST (1):表明列表为空因而没有一个当前元素。
注解:
请参阅ListCurrentItem的注解。
16.8  ListDeleteString
语法:ListDeleteString (listID);
说明:ListDeleteString函数从你在listID指定的字符串列表中删除当前元素。
参数:
listID
指定从中删除当前元素的字符串列表。
返回值:
0:表明函数从一个字符串列表中成功删除当前元素。
< 0:表明函数未能从一个字符串列表中删除当前元素。
END_OF_LIST (1):表明列表为空因而没有一个当前元素。
注解:
请参阅ListCurrentString的注解。
16.9  ListDestroy
语法:ListDestroy (listID);
说明:ListDestroy函数消除一个列表的内容及列表本身。使用该函数来删除一个listID指定的字符串或数字列表。
参数:
listID
指定要消除的字符串或数字列表。
返回值:
0:表明函数成功消除列表,把它从内存中删除。
< 0:表明函数未能消除列表。
注解:
?该函数既可作用于字符串列表,也可作用于数字列表。一旦一消除了一个列表,不要再在任何列表函数中使用该listID。
?当你不再需要时或在安装脚本结尾时,消除你创建的所有列表。当你消除一个列表,你就释放了和该列表联系的所有内存。
16.10  ListFindItem
语法:ListFindItem (listID, nItem);
说明:ListFindItem函数在一个数字列表中查找一个特定元素,从当前元素开始并从该点继续往下。如果你想从列表头开始查找,使用ListGetFirstItem函数。当ListFindItem找到元素时,它就成为列表的当前元素。
参数:
listID
指定要查找的数字列表。
nItem
指定要在列表中查找的项目。
返回值:
0:表明函数成功找到所要求的元素。
< 0:表明一个错误阻止函数查找指定列表。如,如果由listID指定的列表不存在则会发生错误。
END_OF_LIST (1):表明InstallShield查找到了列表结尾但没有找到所要求的元素。
注解:
?该函数仅工作于数字列表。
16.11  ListFindString
语法:ListFindString (listID, szString);
说明:ListFindString函数在一个字符串列表中查找一个特定元素,从当前元素开始并从该点继续往下。如果你想从列表头开始查找,使用ListGetFirstString函数。当ListFindString找到元素时,它就成为列表的当前元素。
    该函数对字符串比较时区分大小写。
参数:
listID
指定要查找的字符串列表。
szString
指定要在列表中查找的字符串。当查找该字符串时,InstallShield执行一个区分大小写的比较。
返回值:
0:表明函数成功找到所要求的元素。
< 0:表明一个错误阻止函数查找指定列表。如,如果由listID指定的列表不存在则会发生错误。
END_OF_LIST (1):表明InstallShield查找到了列表结尾但没有找到所要求的元素。
注解:
?该函数仅工作于字符串列表。
16.12  ListGetFirstItem
语法:ListGetFirstItem (listID, [...]

InstallShield内部库函数全集一(17)

InstallShield内部库函数全集一(17)

17.外壳函数
 外壳函数创建新的程序文件夹,删除存在的程序文件夹,添加项目到存在的程序文件夹。在安装的最后,添加应用程序到适当的程序文件夹以允许用户立即访问你的软件。下列函数也支持不同的图标选项。
AddFolderIcon
添加一个图标到一个文件夹。
CreateProgramFolder
创建一个程序文件夹。
CreateShellObjects
创建在资源窗格的外壳对象文件夹中指定文件夹和快捷方式(或组和图标)。
DeleteFolderIcon
从一个程序文件夹中删除一个图标或项目。
DeleteProgramFolder
从目标系统中删除一个程序文件夹。
GetFolderNameList
检索指定文件夹中的所有子文件夹名和快捷方式。
ProgDefGroupType
在Windows NT环境中将组标识为公用或专用。
QueryProgItem
返回有关一个指定的程序项目或子文件夹的信息。
QueryShellMgr
返回当前外壳管理程序的名称。
ReplaceFolderIcon
置换一个指定文件夹中的一个图标。
SelectFolder
呈现一个对话框,允许最终用户从一个程序文件夹列表中选择一个文件夹。
ShowProgramFolder
显示指定的程序文件夹。
17.1  AddFolderIcon
语法:AddFolderIcon (szProgramFolder, szItemName, szCommandLine, szWorkingDir,
   szIconPath, nIcon, szShortCutKey, nFlag);
说明:AddFolderIcon函数插入或置换由szProgramFolder指定的程序文件夹中的一个图标。如果程序文件夹不存在,AddFolderIcon创建它。SzProgramFolder可以在一个多级级联式菜单中指定一个子文件夹。如果子文件夹不存在,AddFolderIcon将创建该子文件夹,并且在必要时创建它的父文件夹。
    当添加图标到Windows NT下的组时,首先调用ProgDefGroupType来确定组为公用还是专用。缺省时,文件夹图标添加为公用。
参数:
szProgramFolder
指定将图标添加至的文件夹的名称。如果该文件夹不存在,InstallShield创建它。
为添加图标到具体的文件夹,指定全限定路径,如:
"C:\\WINDOWS\\STARTMENU\\PROGRAMS\\ACCESSORIES\\GAMES".
为添加一个快捷方式图标到Windows 95及更高版本的开始程序菜单,给该参数传递一个空字符串(“”)。
注意你也可以在该参数位置传递下列InstallShield系统变量之一:
FOLDER_DESKTOP:将图标添加到桌面文件夹。
FOLDER_STARTUP:将图标添加到启动菜单文件夹。
FOLDER_STARTMENU:将图标添加到开始菜单文件夹。
FOLDER_PROGRAMS:将图标添加到开始菜单\程序文件夹。
你也可以指定一个相对于一个由InstallShield系统变量标识的文件夹的路径,例如,
FOLDER_PROGRAMS ^ "ACCESSORIES\\GAMES"
指定要添加到文件夹的图标名。该名将显示在图标下面。在Windows 95及更高版本下,调用AddFolderIcon添加一个图标到一个程序文件夹时,也在由szCommandLine指定的链接目录中创建一个链接文件。注意开发人员外壳不允许在项目名中有下列字符:/, \, :, ?, <, >, 或 |。
szCommandLine
指定下列情况之一:
和图标相联系的可执行文件的全限定名,包括任何命令行参数。为添加一个快捷方式图标到Windows 95及更高版本的开始程序菜单,输入一个链接目录的全限定路径,在那儿你的应用程序存放了它的图标链接文件。
全限定路径,如果szItemName是一个子文件夹 。(仅对Windows 95及更高版本、Windows NT 4.0)。
如果命令行包含一个长文件名,它必须由引号包围(括起)。更多信息请查看下面的注解部分。
szWorkingDir
指定应用程序文件所在的目录。(如果szItemName是一个子文件夹则不适用)。为使得包含程序文件的目录为工作目录,给该参数传递一个空字符串(“”)。不要调用LongPathToQuote来把该路径包围(括)在引号中。更多信息请查看下面的注解部分。
szIconPath
定要显示的图标的全限定文件名。(如果szItemName是一个子文件夹则不适用)。不要调用LongPathToQuote来把该路径包围(括)在引号中。更多信息请查看下面的注解部分。
nIcon
指定Windows中由szIconPath指定的可执行文件的的图标序号。(如果szItemName是一个子文件夹则不适用)。图标序号数从0开始,因此为显示可执行文件的第一个图标,指定0;为显示第二个,指定1,如此继续。如果你不使用一个Windows图标,给该参数指定0。
szShortCutKey
指定快捷键(以字符串形式),允许最终用户迅速启动应用程序。例如,如果你想要能通过按下”Ctrl”,”Alt”然后”1”键来打开应用程序,则给该参数传递”Ctrl+Alt+1”。 如果szItemName是一个子文件夹则不适用)。
nFlag
指定图标表现形式。在该参数位置传递下列预定义常量之一或多个。为给该参数传递两个或更多预定义常量,用按位或操作符(|)将那些常量进行组合:
REPLACE:表明文件夹中的当前图标或项目被置换。
RUN_MAXIMIZED:表明程序被装入时必须被最大化。
RUN_MINIMIZED:表明程序被装入时必须被最小化。
NULL:表明没有选项。
返回值:
0:表明函数成功添加或置换指定文件夹中的图标并使可执行文件和图标相关联。
< 0:表明函数没有能添加或置换指定文件夹中的图标并使可执行文件和图标相关联。
注解:
?如果到你的应用程序可执行文件的路径包含长路径名,你必须把该全限定文件名用单引号或双引号括起来。(如果文件名已经被赋给一个变量,传递该变量给LongPathToQuote来插入引号。)注意命令行参数必须不被引号包围。因此,建议从两个分隔的字符串来建立一个szCommandLine字符串。
?不要调用LongPathToQuote来得到作为参数szWorkingDir 和 szIconPath的表达式。InstallShield自动将这些路径括在引号中。
17.2  CreateProgramFolder
语法:CreateProgramFolder (szFolderName);
说明:CreateProgramFolder函数在目标系统创建一个新文件夹。如果该文件夹已经存在,它被高亮显示。在Windows 95及更高版本,给文件夹被创建在开始程序菜单中。当在Windows NT下创建程序组时,首先调用ProgDefGroupType来确定组为公用还是专用。缺省设置为公用。
参数:
szFolderName
指定要添加到目标系统的文件夹名。
返回值:
0:表明函数成功添加文件夹到目标系统或该文件夹已经存在。
< 0:表明该函数没有能添加指定的程序文件夹。
17.3  CreateShellObjects
语法:CreateShellObjects (szReserved);
说明:CreateShellObjects函数创建已经在当前媒体上被指定的外壳对象(文件夹或快捷方式或组和图标)。当前媒体名被保存在系统变量MEDIA中。外壳对象在资源窗格的外壳对象文件夹中被定义。如果你使用一个基于事件的脚本,任何与一个或多个文件组(使用该外壳对象的文件组属性)相联系的外壳对象在那些文件组被装入时被自动创建。
注意:CreateShellObjects不会在目标系统上创建一个空文件夹(或组)。如果资源窗格中的一个文件夹或组是空的,它将不会由安装程序创建。同样,如果为资源窗格中的一个文件夹指定的快捷方式在运行时没有被创建(因为它们相联系的文件组没有被装入),那么该文件夹不被创建。为创建一个空文件夹(或组),在你的脚本中调用CreateProgramFolder。
参数:
szReserved
给该参数传递一个空字符串(“”)。不允许其它值。
返回值:
0:表明函数成功。
-1:未知错误。
-2:在当前媒体上,调用ComponentTransferData函数前调用该函数。注意,在一个运行基于事件的脚本的安装中,ComponentTransferData被自动调用。
-3:文本替换失败。
-4:创建快捷方式失败。
-5:创建文件夹失败。
-6:创建一个Internet快捷方式失败。
注解:
?安装初始化过程中,系统变量MEDIA的值被设置为‘DATA’。如果你修改该变量的值来指向一个脚本创建组件集,则你在调用CreateShellObjects前必须该值修改回‘DATA’。
This function should be called only after ComponentTransferData has been called.
该函数只有在已经调用ComponentTransferData后才能被调用。
17.4  DeleteFolderIcon
语法:DeleteFolderIcon [...]