2005年02月03日

InstallShield内部库函数全集二十-卸载函数、版本检测函数及杂项函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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的注解。

InstallShield内部库函数全集十九-批处理函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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对它修改的文件不做拷贝备分。

InstallShield内部库函数全集十七-外壳函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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 (szProgramFolder, szItemName);
说明:DeleteFolderIcon函数从一个文件夹删除一个程序图标。
参数:
szProgramFolder
指定包含要删除图标的文件夹名。
szItemName
指定要被删除的图标名。
返回值:
0:表明函数成功删除指定图标。
< 0:表明函数没有能删除指定图标。
17.5  DeleteProgramFolder
语法:DeleteProgramFolder (szFolderName);
说明:DeleteProgramFolder函数删除一个程序文件夹和它的内容,包括所有位于指定文件夹下的文件夹。它不能删除“程序”文件夹。
参数:
szFolderName
指定要删除的文件夹名。
返回值:
0:表明函数成功删除指定文件夹。
< 0:表明函数没有能删除指定文件夹。
17.6  GetFolderNameList
语法:GetFolderNameList (szFolderName, listItemsID, listSubFoldersID);
说明:GetFolderNameList函数被使用来列举一个指定文件夹的所有程序项快捷方式和子文件夹。该函数也可以被用来列举一个根文件夹的所有程序项快捷方式和子文件夹。
参数:
szFolderName
指定被查询的文件夹名。你可以给szFolderName指定一个全限定路径,如:”C:\\Windows\\Start Menu\\Programs\\Accessories\\Games”。如果szFolderName是空,GetFolderNameList查找缺省程序目录(看下面)。如果你不给szFolderName指定一个绝对路径,GetFolderNameList在缺省程序目录下查找一个子文件夹,按照操作系统:
Windows 95及更高版本:开始菜单\程序文件夹位于Windows文件夹下。注意即使用户配置文件被激活,该定位不会改变。
Windows NT 4.0(如果由ProgDefGroupType选定为公用):..\profiles\All Users\Start Menu\Programs文件夹位于Windows文件夹下。
Windows NT 4.0(如果由ProgDefGroupType选定为专用):. .\profiles\<user name>\Start Menu\Programs位于Windows文件夹下;<user name>是当前用户的用户名。
你也可以使用一个InstallShield系统变量:
FOLDER_DESKTOP:查找桌面文件夹。
FOLDER_STARTUP:查找启动菜单文件夹。
FOLDER_STARTMENU:查找开始菜单文件夹。
FOLDER_PROGRAMS:查找开始菜单\程序文件夹。
或你可以使用一个相对路径,如:
FOLDER_PROGRAMS ^ “ACCESSORIES\\GAMES”
listItemsID
在szFolderName返回一个程序项快捷方式名的列表。注意在Windows NT,如果szFolderName包含专用和公用程序项,在该参数返回的列表将包含公用或专用程序项快捷方式,但不是都包含。由listItemsID标识的列表必须已经通过调用ListCreat被初始化。
listSubFoldersID
在szFolderName返回子文件夹名的列表。注意在Windows NT,如果szFolderName包含专用和公用程序项,在该参数返回的列表将包含公用或专用程序项快捷方式,但不是都包含。由listSubFoldersID标识的列表必须已经通过调用ListCreat被初始化。
返回值:
0:GetFolderNameList成功检索所有程序项和子文件夹名。
< 0:GetFolderNameList没有能检索所有程序项和子文件夹名。
注解:
·当该函数被使用在一个运行于Windows NT 4.0下的安装中,应用下列约束条件:
如果你列举一个具体的程序文件夹(也就是,你已经指定到达文件夹的路径),该文件夹必须与当前文件夹类型匹配,公用或专用。如果该文件夹和当前文件夹类型不匹配,它将不会被定位并且函数失败。为改变缺省文件夹类型,调用ProgDefGroupType。
·如果你列举一个支持专用和公用项目和文件夹的文件夹,如FOLDER_PROGRAMS,只有那些适当类型的程序项快捷方式和文件夹将由该函数返回。为改变缺省文件夹类型,调用ProgDefGroupType。
17.7  ProgDefGroupType
语法:ProgDefGroupType (nType);
说明:ProgDefGroupType函数将指定一个程序组在Windows NT下为专用或公用。在你调用AddFolderIcon 或 CreateProgramFolder前调用该函数。缺省程序组类型是公用。
  该函数仅使用在Windows NT环境中。它在其它环境中被忽略。
参数:
nType
指定一个程序组类型。在该参数位置传递下列预定义常量之一:
PERSONAL:指定一个专用程序组。
COMMON:指定一个公用程序组。
返回值:
0:函数通常返回0。
注解:
·如果一个运行在Windows NT下的安装中调用SdSelectFolder前调用了ProgDefGroupType,SdSelectFolder将根据传递给ProgDefGroupType的参数显示程序文件夹(公用或专用)。
17.8  QueryProgItem
语法:QueryProgItem (szFolderName, szItemName, svCmdLine, svWrkDir, svIconPath,
nvIconIndex, svShortCutKey, nvMinimizeFlag);
说明:QueryProgItem函数检验一个指定程序项或子文件夹名是否存在。如果InstallShield找到该项目或子文件夹,QueryProgItem返回它的属性。属性包括应用程序的命令行,工作目录,图标路径,快捷键和最小化标志。
    为使用QueryProgItem,在参数szFolderName 和szItemName位置输入信息。InstallShield将用程序项的属性来填充剩余的参数。
当在Windows NT下查询组或文件夹时,首先调用ProgDefGroupType来确定组为公用还是专用。缺省设置为公用。
参数:
szFolderName
指定包含该项目或子文件夹的文件夹名。你可以给szFolderName指定一个全限定路径,如:
“C:\\WINDOWS\\START MENU\\PROGRAMS\\ACCESSORIES\\GAMES”
如果szFolderName是空,QueryProgItem查找缺省程序目录(看下面)。如果你不给szFolderName指定一个绝对路径,QueryProgItem在缺省程序目录下查找一个子文件夹,按照操作系统:
Windows 95及更高版本:环境变量Windir下的开始菜单\程序。
Windows NT 4.0(如果由ProgDefGroupType选定为公用):环境变量Windir下的..\profiles\All Users\Start Menu\Programs目录。
Windows NT 4.0(如果由ProgDefGroupType选定为专用):环境变量Windir下的. .\profiles\<user name>\Start Menu\Programs目录;<user name>是从系统变量USERPROFILE得的当前用户的用户名。
你也可以使用一个InstallShield系统变量:
FOLDER_DESKTOP:在桌面文件夹中查询项目。
FOLDER_STARTUP:在启动菜单文件夹中查询项目。
FOLDER_STARTMENU:在开始菜单文件夹中查询项目。
FOLDER_PROGRAMS:在开始菜单\程序文件夹中查询项目。或者你可以使用一个相对路径,例如:
FOLDER_PROGRAMS ^ “ACCESSORIES\\GAMES”
szItemName
指定要找的程序项或子文件夹名。
svCmdLine
返回项目的可执行文件的命令行或子文件夹的完全路径。
svWrkDir
返回程序项工作目录的全路径。(如果szItemName是一个子文件夹则不适用。)
svIconPath
返回.ico文件或.exe文件的全限定文件名。(如果szItemName是一个子文件夹则不适用。)
nvIconIndex
返回作为程序项图标的索引。(如果szItemName是一个子文件夹则不适用。)
svShortCutKey
返回项目的快捷键。(如果szItemName是一个子文件夹则不适用。)
nvMinimizeFlag
(如果szItemName是一个子文件夹则不适用。)返回下列常量之一,指示第一次显示时一个应用程序窗口是否被最小化:
NULL:表明应用程序窗口启动时不被最小化。
RUN_MINIMIZED:表明应用程序窗口启动时被最小化。
返回值:
IS_ITEM (0):表明szItemName是szFolderName的一个程序项或快捷方式。
IS_FOLDER (1):表明szItemName是szFolderName的一个子文件夹。
< 0:表明该函数不能找到程序项或子文件夹名。
注解:
·不同语言下开始菜单位置不同。不管如何,InstallShield能自动选择正确路径。
17.9  QueryShellMgr
语法:QueryShellMgr (svShellMgrName);
说明:QueryShellMgr函数得到Microsoft Windows使用的程序外壳名。如,如果程序外壳是Explorer,则QueryShellMgr在参数svShellMgrName返回字符串”Explorer.exe”。
    如果目标系统的外壳不是Explorer,你可能需要用LaunchApp函数来装入该外壳。创建程序文件夹和程序图标的InstallShield函数与外壳使用一个DDE会话来创建程序文件夹和程序项。大多数可选外壳如Norton Desktop仿真Explorer外壳。因此,它们可以创建程序文件夹和项目。
    在不仿真Explorer外壳的外壳中,InstallShield不能使用程序文件夹和程序项函数来创建或修改程序文件夹和程序项。
参数:
svShellMgrName
返回当前运行的外壳管理程序的非限定名(也就是,没有驱动器标识或路径)。
返回值:
0:表明函数成功检索程序外壳名。
< 0:表明函数没有能检索程序外壳名。
17.10  ReplaceFolderIcon
语法:ReplaceFolderIcon (szProgramFolder, szItemName, szNewItem, szCmdLine,
  szWorkingDir, szIconPath, nIcon, szShortCutKey, nFlag);
说明:ReplaceFolderIcon函数置换一个指定文件夹中的一个图标。你必须指定一个存在的文件夹,可以是一个你用CreateProgramFolder函数创建也可以是一个已经存在于用户系统上的。
参数:
szProgramFolder
指定包含要被置换的图标的文件夹名。
szItemName
指定要置换的图标名。
szNewItem
指定置换后要显示的图标名。
szCmdLine
指定下列之一:
和图标相联系的可执行文件的全限定名,包括任何命令行参数。
如果szItemName是一个子文件夹,则是全限定路径。
szWorkingDir
指定应用程序文件所在的目录。(如果szItemName是一个子文件夹则不适用)。为是包含程序文件的目录为工作目录,给该参数传递一个空字符串(“”)。
szIconPath
指定包含该新图标的一个图标文件名或一个有效的Windows可执行文件。
nIcon
如果你指定一个Windows 可执行图标,则指定该图标序号。否则,给该参数传递0。
szShortCutKey
指定包含快捷键序列的字符串,用户可以按下它们来启动应用程序。例如,如果你想要能通过按下”Ctrl”,”Alt”然后”1”键来打开应用程序,则给该参数传递”Ctrl+Alt+1”。 如果szItemName是一个子文件夹则不适用)。
nFlag
指定一个或多个选项。在该参数位置传递下列预定义常量。为给该参数传递多个选项,用按位或操作符(|)将那些常量进行组合:
NULL:表明没有选项。
REPLACE:表明存在的图标要被新图标置换。
RUN_MAXIMIZED:表明程序被装入时要最大化。
RUN_MINIMIZED:表明程序被装入时要最小化。
返回值:
0:表明成功置换图标。
< 0:表明函数没有能置换图标。
17.11  SelectFolder
语法:SelectFolder (szTitle, szDefFolder, svResultFolder);
说明:SelectFolder函数显示一个对话框,允许最终用户在一个编辑区输入一个程序文件夹名或从一个列表中选择一个程序文件夹。该函数自动显示系统中的所有程序文件夹。一个传递给svDefFolder的缺省的文件夹名被显示在编辑区。被选定的文件夹名在svResultFolder返回。如果指定文件夹不存在,它不会被创建。
参数:
szTitle
指定对话框标题。为显示缺省标题(“选择程序文件夹”),给该参数传递一个空字符串(“”)。
szDefFolder
指定要显示为缺省文件夹的文件夹名。
svResultFolder
返回有最终用户选定或指定的文件夹名。如果该文件夹不存在,你必须调用CreateProgramFolder来创建它;SelectFolder不会创建该文件夹。
返回值:
NEXT (1):表明最终用户选定Next按钮。
BACK (12):表明最终用户选定Back按钮。
< 0:表明函数成功。
17.12  ShowProgramFolder
语法:ShowProgramFolder (szFolder, nCommand);
说明:ShowProgramFolder函数显示一个程序文件夹。
参数:
szFolder
指定要显示的文件夹名。
nCommand
指定文件夹状态。在该参数位置传递下列预定义常量之一:
SW_SHOW:以标准状态显示文件夹。
SW_MAXIMIZE:最大化文件夹。
SW_MINIMIZE:最小化文件夹。
SW_RESTORE:将文件夹还原到原始大小。
返回值:
该函数没有返回值。

InstallShield内部库函数全集十八-扩展函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


18  扩展函数
  扩展函数允许你调用动态链接库中的函数,调用Windows APIs,或运行另一个应用程序或安装程序脚本。UseDLL 和 UnUseDLL函数允许你装入一个DLL到内存中或卸载它并使用DLL。LaunchApp 和 LaunchAppAndWait函数允许你仍在执行脚本时运行另一个Windows 或DOS应用程序。
CallDLLFx
从一个外部DLL中调用函数。
Delay
延迟安装程序脚本的执行。
LaunchApp
运行另一个程序。
LaunchAppAndWait
运行另一个程序并等待该程序终止。
UnUseDLL
从内存卸载一个DLL。
UseDLL
把一个DLL装入到内存。
18.1  CallDLLFx
语法:CallDLLFx (szDLL, szFunction, lvValue, svValue);
说明:CallDLLFx函数调用一个指定的DLL中的函数。该函数必须使用下列固定定义,hwnd是InstallShield主窗口的主窗口句柄:
LONG APIENTRY YourFunction (HWND hwnd, LPLONG lpIValue, LPSTR lpszValue);
参数:
szDLL
指定包含要执行的函数的DLL的全限定文件名。
szFunction
指定由szDLL指定的DLL中的函数的名称。
IvValue
指定访问一个DLL函数时传递的长整型变量。
svValue
指定传递给DLL函数的字符串变量。
返回值:
CallDLLFx函数从DLL中的函数返回一个长整型数。
18.2  Delay
语法:Delay (nSeconds);
说明:Delay函数使一个安装程序脚本的执行延迟一个指定的秒数。其它和InstallShield同时运行的任务在InstallShield被延迟时仍正常进行。
参数:
nSeconds
指定程序被延迟的秒数。
返回值:
0:表明函数成功延迟了脚本的执行。
< 0:表明函数未能延迟了脚本的执行。
18.3  LaunchApp
语法:LaunchApp (szCommand, szCmdLine);
说明:LaunchApp函数允许你在脚本内运行另一个应用程序。该应用程序和脚本同时运行。InstallShield对运行的应用程序没有控制权并且不能确定运行的应用程序是否成功运行。运行的应用程序和其它在运行InstallShield时你启动的应用程序一样运行。你可以在InstallShield中运行任何你可以在操作系统中正常运行的应用程序。
参数:
szCommand
指定要运行的应用程序的全限定名。如果你指定一个没有路径的文件名,InstallShield在当前文件夹中,Windows 文件夹中,Windows系统文件夹中和列在环境变量PATH中的文件夹中查找。
如果应用程序的全限定名包括长文件夹名和/或一个长文件名,在把szCommand传递给LaunchAppAndWait之前先把它传递给LongPathToQuote。
szCmdLine
指定传递给szCommand标识的应用程序的命令行参数(如果有)。如果没有参数,则迟到一个空字符串。
返回值:
0:LaunchApp成功运行应用程序。
< 0:LaunchApp未能找到或未能运行应用程序。
注解:
·安装进程在应用程序被运行后继续。应用程序即使在安装脚本终止后仍可以运行。
·你也可以使用FindWindow 和 SendMessage函数来控制或发送消息给运行的应用程序。如果你想要在一个Window中运行一个DOS应用程序,你可以提供一个和DOS应用程序同名的PIF(Program Information File)。在PIF文件中,你指定应用程序运行在其下的一个窗口方式。
·运行一个DOS程序时,你不能确定返回结果DOS_ERRORLEVEL。然而你可以把一个DOS应用程序放进一个批处理文件,让批处理文件来识别错误并创建另一个包含返回错误代码的文件。然后你可以读该文件并确定从DOS应用程序返回的错误代码。
·LaunchApp 使用Windows API 的CreateProcess 来运行应用程序。
18.4  LaunchAppAndWait
语法:LaunchAppAndWait (szProgram, szCmdLine, lWait);
说明:LaunchAppAndWait函数运行由szProgram指定的带有szCmdLine指定的命令行参数的应用程序。第三个参数,lWait指示安装在继续前是否要等待直到运行的应用程序终止。
  一个安装程序只能监控由szProgram指定的应用程序;如果该应用程序要运行其它应用程序或进程,安装程序不能监控它们。因此,安装程序将在第一个应用程序结束后继续,即使那时由第一个应用程序运行的其它应用程序仍在运行。注意如果运行的应用程序终止失败,则安装程序将无限等待运行的应用程序完成。
参数:
szProgram
指定要被运行的应用程序的文件名。建议要指定应用程序的完整路径和文件名。如果你不包括一个路径,InstallShield将使用被Windows API 函数CreateProcess使用的相同的查找次序来定位文件。如果文件未能在这些位置找到,函数将失败。
  如果应用程序的全限定名包括长文件夹名和/或一个长文件名,在把szCommand传递给LaunchAppAndWait之前先把它传递给LongPathToQuote。
szCmdLine
指定传递给运行的应用程序的命令行参数。为运行没有命令行参数的应用程序,传递一个空字符串。
lWait
指定安装程序在继续前是否要等待运行的应用程序终止。在该参数位置传递下列预定义常量之一:
NOWAIT:指定安装程序在运行应用程序后立即继续,应用程序将和安装程序脚本同时运行。注意使用该参数等效于调用函数LaunchApp。
WAIT:指定安装程序必须等待直到由该函数运行的应用程序终止。
返回值:
1:表明应用程序成功运行。
< 0:表明应用程序未能运行。
注解:
·InstallShield 安装程序使用函数CreateProcess。在InstallShield运行应用程序后,它查找装入的应用程序的窗口句柄。如果它找到窗口句柄,则它在继续前等待直到应用程序窗口消失。
·安装程序不能监控一个不创建窗口的应用程序。如果指定的应用程序没有创建一个窗口,安装程序在运行应用程序后立即继续。注意应用程序的窗口不需要可见,但它必须存在,以便让安装程序等待。
·一些应用程序试图装入DLLs并且当那些DLLs不能被定位时不能正确运行。为确保一个应用程序能找到它需要的DLLs,有必要在调用LaunchAppAndWait前改变到包含可执行应用程序的目录。为改变当前目录,调用ChangeDirectory函数。
·如果运行的应用程序终止失败,则安装程序将无限等待运行的应用程序完成。
·LaunchAppAndWait以一个全屏DOS窗口来运行DOS程序。为以一个不同类型的窗口来运行一个DOS程序,你必须直接调用Windows APIs。
18.5  UnUseDLL
语法:UnUseDLL (szDLLName);
说明:UnUseDLL函数从内存卸载一个DLL。UnUseDLL将该DLL的锁计数减少一。当锁计数等于0时,InstallShield 卸载该 DLL。每一个对UseDLL的调用都必须有一个对应的对UnUseDLL的调用,因而DLLs在它们不再需要时不会留在内存中而浪费系统资源。一旦你卸载了一个DLL,你不能再调用该DLL中的函数。
    Microsoft Windows系统 DLLs, 如 User.exe, User32.dll, Gdi.exe, Gdi32.dll, Krnl386.exe, Krnl286.exe, 和 Kernel32.dll,自动由Windows 装入和卸载。不要调用UseDLL 和UnUseDLL 来装入和卸载这些DLLs。
参数:
szDLLName
指定DLL的文件名。该参数不要包含路径。
返回值:
0:表明函数成功解锁和从内存卸载DLL。
< 0:表明函数未能解锁和卸载DLL。
注解:
如果脚本在用UnUseDLL正确卸载DLL前退出或终止,DLL将被锁定在内存。如果你试图再次访问DLL,你的脚本可能失败。你必须通过重启Windows来将DLL从内存中删除。
18.6  UseDLL
语法:UseDLL (szDLLName);
说明:UseDLL函数把一个DLL装入内存。在DLL已经被装入内存后,你的安装程序脚本可以调用该DLL中的函数。注意如果由szDLLName指定的DLL需要其它DLL,那些DLL必须位于某个文件夹中,该DLL试图从这个文件夹装入它们。正常时它是当前目录。为确保那些DLL可以被定位,在调用UseDLL前调用ChangeDirectory来改变当前目录到那些DLL所处的位置。若不能做到这些,则可能DLL不能被正确装入。
  每次你将一个DLL装入到内存,该DLL的锁计数增加。锁计数计算使用该DLL的应用程序的数目。你不再使用DLL时,你必须马上调用UnUseDLL来卸载它。如果你不卸载不再需要的DLL,则该DLL在没有应用程序需要它时仍会留在内存中,因而浪费系统资源。在脚本中每个对UseDLL的调用必须有一个相对应的UnUseDLL调用。
  Microsoft Windows系统 DLLs, 如 User.exe, User32.dll, Gdi.exe, Gdi32.dll, Krnl386.exe, Krnl286.exe, 和 Kernel32.dll,自动由Windows 装入和卸载。不要调用UseDLL 和UnUseDLL 来装入和卸载这些DLLs。
参数:
szDLLName
指定要装入的DLL名。如果你未指定一个扩展名,InstallShield假定文件扩展名为.dll 或.exe。建议该参数包括一个路径,但只是可选。如果该参数没有指定DLL的路径,InstallShield将使用和Windows API 函数LoadLibrary使用的相同的查找次序来查找DLL。
有关查找次序的更多信息可查看Windows API函数的说明。
    为在你的安装中包含DLL,把它添加到安装文件窗格中的Language Independent文件夹的合适的子文件夹中。InstallShield将把它压缩到你的安装中。当Setup.exe执行时,它自动解压缩并把你的安装的内容拷贝到由SUPPORTDIR指定的临时目录中。然后你可以添加DLL文件名到SUPPROTDIR以便指向该DLL,如下所示:
     szDLLName = SUPPORTDIR^”MYDLL.DLL”;
     UseDLL (szDLLName);
    如果你不放置你的DLL到你的安装中(通过把它插入到安装文件窗格中的合适文件夹中),你可以把文件和你的应用程序文件一起分散,然后从目标系统装入它。然而,如果你这么做,你必须指定你把DLL安装到的位置使得你的安装程序可以指向它。你也必须确保你的安装程序不会试图在DLL被传输到目标系统之前装入它。
返回值:
0:表明函数成功地把DLL装入内存。
< 0:表明函数未能把DLL装入内存。
注解:
·如果UseDLL失败,最大的可能性是DLL没有找到。如果这样,确保参数szDLLName指定了正确的路径。
·另一个通常的使用DLL的错误原因和DLL的依赖性有关:被你装入的DLL所访问的DLLs。如果你的DLL 访问的DLLs没有被装入或没有找到,你的DLL调用可能失败。如果发生这种情况,确保其它DLL存在于系统上并且它们是可访问的。
·如果脚本在用UnUseDLL正确卸载DLL前退出或终止,DLL将被锁定在内存。如果你试图再次访问DLL,脚本可能失败。你必须通过重启Windows来将DLL从内存中删除。

InstallShield内部库函数全集十六-列表处理函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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, nvItem);
说明:ListGetFirstItem函数从一个数字列表中检索第一个元素。该第一个项目成为该列表中的当前元素。
参数:
listID
指定要检索其第一个元素的数字列表。
nvItem
返回数字列表的第一个元素。
返回值:
0:表明函数成功检索了一个数字列表的第一个元素。
-1:表明发生了一个错误阻止函数检索一个数字列表中的第一个元素。
END_OF_LIST (1):表明列表为空。
注解:
·该函数仅工作于数字列表。
16.13  ListGetFirstString
语法:ListGetFirstString (listID, svString);
说明:ListGetFirstString函数从一个字符串列表中检索第一个元素。该第一个项目成为该列表中的当前元素。
参数:
listID
指定要检索其第一个元素的字符串列表。
svString
返回字符串列表的第一个元素。
返回值:
0:表明函数成功检索了一个字符串列表的第一个元素。
-1:表明发生了一个错误阻止函数检索一个字符串列表中的第一个元素。
END_OF_LIST (1):表明列表为空。
注解:
·该函数仅工作于字符串列表。
16.14  ListGetNextItem
语法:ListGetNextItem (listID, nvItem);
说明:ListGetNextItem函数检索一个数字列表中当前元素之后的项目。被检索的项目成为该列表中的当前元素。
参数:
listID
指定要从中检索下一个元素的数字列表。
nvItem
返回在数字列表中紧随当前元素的项目。该项目成为列表中的当前元素。
返回值:
0:表明函数成功检索一个数字列表中当前元素之后的元素。
-1:表明发生一个错误阻止函数检索一个数字列表中的指定元素。
END_OF_LIST (1):表明当前项目是列表中的最后一个元素。
注解:
·该函数仅工作于数字列表。
16.15  ListGetNextString
语法:ListGetNextString (listID, svString);
说明:ListGetNextString函数检索一个字符串列表中当前元素之后的项目。被检索的项目成为该列表中的当前元素。
参数:
listID
指定要从中检索下一个元素的字符串列表。
svString
返回在数字列表中紧随当前元素的项目。该项目成为列表中的当前元素。
返回值:
0:表明函数成功检索一个字符串列表中当前元素之后的元素。
-1:表明发生一个错误阻止函数检索一个字符串列表中的指定元素。
END_OF_LIST (1):表明当前项目是列表中的最后一个元素。
注解:
·该函数仅工作于字符串列表。
16.16  ListReadFromFile
语法:ListReadFromFile (listID, szFile);
说明:ListReadFromFile函数读一个文本文件到一个列表。一旦你把一个文本文件装入一个列表,你就可以在安装中把它用到不同的函数,如在安装结尾显示一个README文件或用ListWriteToFile写一个字符串列表到磁盘。
    该函数让你可以很方便地把整个文件装入到一个列表,而不是一次创建一个列表项。
参数:
listID
返回一个从szFile指定的文件中读入行的列表。由listID 标识的列表必须已经由ListCreat初始化。
szFile
指定将要被读入列表的文件的全限定名。
返回值:
0:表明函数成功将一个文件中的文本行读入到一个列表。
< 0:表明函数未能将一个文件中的文本行读入到一个列表。
注解:
·该函数检测每个字符串结尾的换行符并使用这些字符作为列表中每个元素的分界符。
·该函数仅作用于字符串列表和文本文件。
16.17  ListSetCurrentItem
语法:ListSetCurrentItem (listID, nItem);
说明:ListSetCurrentItem函数将nItem的值赋给一个数字列表中的当前元素。
参数:
listID
指定其当前元素要被更新的数字列表的名称。由listID标识的列表必须早以由ListCreat初始化。
nItem
指定将要置换当前元素的数值型值。
返回值:
0:表明函数成功更新数字列表中的当前元素。
< 0:表明函数未能更新数字列表中的当前元素。
END_OF_LIST (1):表明列表为空。
注解:
·该函数仅工作于数字列表。
16.18  ListSetCurrentString
语法:ListSetCurrentString (listID, szString);
说明:ListSetCurrentString函数将szString的值赋给一个字符串列表中的当前元素。
参数:
listID
指定其当前元素要被更新的字符串列表的名称。由listID标识的列表必须早以由ListCreat初始化。
szString
指定将要置换当前元素的字符串型值。
返回值:
0:表明函数成功更新字符串列表中的当前元素。
< 0:表明函数未能更新字符串列表中的当前元素。该错误的通常的原因是下标超出有效列表元素的范围。
注解:
·该函数仅工作于字符串列表。
16.19  ListSetIndex
语法:ListSetIndex (listID, nIndex);
说明:ListSetIndex函数使用一个下标来指定一个字符串列表或数字列表中的一个特定元素为当前元素。你也可以使用使用一个常量来一次检索列表中的一个元素或跳到列表的头或尾。通过使用下标来访问列表中的项,你可以将数字列表或字符串列表处理为队列。
    下标数从0开始。例如,如果你在参数nIndex中输入5,则列表中的第六个物理位置的项成为当前元素。使用ListCurrentItem 和 ListCurrentString来检索当前元素的值。
参数:
listID
指定其下标要被设置的字符串列表或数字列表的名称。
nIndex
指定你要设置为当前元素的元素的数。列表元素从0开始计数。在该参数位置传递一个数值型值或下列预定义常量之一:
LISTFIRST:移动到列表的第一个元素。
LISTLAST:移动到列表的最后一个元素。
LISTNEXT:移动到列表的下一个元素。
LISTPREV:移动到列表的前一个元素。
返回值:
0:表明函数成功更新列表中的当前元素。
< 0:表明函数未能更新列表中的当前元素。
END_OF_LIST (1):表明下标超出有效列表元素的范围。
注解:
·在你设置被索引的元素为当前元素后,你可以在脚本中使用ListCurrentItem 或 ListCurrentString函数来检索被索引(当前)项的值。
·该函数可工作于字符串列表和数字列表。
16.20  ListWriteToFile
语法:ListWriteToFile (listID, szFileName);
说明:ListWriteToFile函数将一个字符串列表写到一个文本文件。每个字符串显示在文本文件中分隔的行中。
参数:
listID
指定写到一个文本文件中的字符串名。
szFileName
指定要写字符串列表到其中的文件的全限定名。如果文件不存在,则被创建。如果文件已经存在,则它被修改。
返回值:
0:函数成功。
< 0:函数失败。

InstallShield内部库函数全集十五-注册表函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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。

InstallShield内部库函数全集十四-路径缓冲函数(中文版)



  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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内部库函数全集十二-共享和锁定文件函数、字符串函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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。
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 = StrFind(“Scripting is fun”,”fun”);
如果只需要一个TRUE或FALSE的返回值来指示一个字符串是否包含另一个字符串,(也就是,如果子串的位置是不重要的),使用字符串查找操作符(%),如下所示:
   if (szString % szFindMe) then …
在if语句中可以被解析的布尔表达式中,你可以只使用字符串查找操作符。你不能在repeat语句或while语句中使用它。
参数:
szString
指定要查找的字符串。
szFindMe
指定要在szString中查找的字符串。
返回值:
X:如果szString包含szFindMe,X是szFindMe中第一个字符的数值位置。SzString中第一个字符是在位置0。
< 0:表明szString不包含szFineMe。
13.8  StrGetTokens
语法:StrGetTokens (listID, szString, szDelimiterSet);
说明:StrGetTokens函数从szString指定的字符串中析取子串(称为令牌)并且把它们放置到listID指定的列表中。SzString中的子串必须被由szDelimiterSet指定的一个或多个字符分隔(相互分隔)。
    例如,如果你调用StrGetTokens,字符串”One;Two;Three;Four;Five”作为第二个参数,”;”为第三个参数,”One”, “Two”, “Three”, “Four”, 和 “Five”这五个字符串将被返回到listID。使用列表函数,如ListGetFirstString和 ListGetNextString来访问列表中的每个令牌。
    如果szString中的第一个字符与szDelimiterSet中的一个字符匹配,一个空字符串将被插入为列表的第一个元素。同样,如果szString中的最后一个字符与szDelimiterSet中的一个字符匹配,一个空字符串将被插入为列表的最后一个元素。
参数:
listID
返回令牌列表。由listID标识的字符串列表必须已经通过对ListCreate的调用而初始化。
szString
指定要被分析的字符串。
szDelimiterSet
指定一个或多个分隔符的集合。每个分隔符是一个字符(1字节)。如果你在该参数传递一个空字符串,该函数以空字符为分隔符来查找。当你使用GetProfString函数时有用。
当一个空格被指定为分隔符,StrGetTokens将连续的空格处理作一个单独的分隔符。
返回值:
0:表明函数成功分隔字符串并把令牌(token)插入到指定列表中。
< 0:表明函数未能分隔字符串并把令牌插入到指定列表中。
13.9  StrLength
语法:StrLength (szString);
说明:使用StrLength函数得到一个字符串中的字节数。为确定一个字符串中的字符数,使用StrLengthChars。
参数:
szString
指定要确定其大小的字符串。
返回值:
X:X是字符串中的字节数。
< 0:表明函数未能确定字符串中的字节数。
13.10  StrLengthChars
语法:StrLengthChars (szString);
说明:使用StrLengthChars函数得到一个字符串中的字符数。为确定一个字符串中的字节数,使用StrLength。
参数:
szString
指定要确定其大小的字符串。
返回值:
X:X是字符串中的字符数。
< 0:表明函数未能确定字符串中的字符数。
13.11  StrRemoveLastSlash
语法:StrRemoveLastSlash (svPath);
说明:StrRemoveLastSlash函数从一个路径说明中删除结尾反斜杠。
参数:
svPath
指定一个字符串,其值必须是一个路径说明;返回没有结尾反斜杠的路径。注意如果路径不包含一个反斜杠,它不作修改就被返回。
返回值:
0:表明函数成功删除结尾反斜杠或路径不包含一个结尾反斜杠。
< 0:表明函数未能删除结尾反斜杠。
注解:
·StrRemoveLastSlash给将AskPath 或ParsePath返回的路径剪裁掉结尾反斜杠提供了一个便利的途径。因为它的目的是产生一个有效路径名,StrRemoveLastSlash不从一个根目录说明中删除反斜杠,如”A:\”或 “C:\”;这样做可将一个有效路径名转换到一个驱动器说明(标识)。你是否需要在任何情况下剪裁掉一个路径的结尾反斜杠,可参考下面的脚本片段。
    AskPath(“”, “”, svPath);
    if (StrLength(svPath) = 3)
       && (svPath[1] = “:”)
       && (svPath[2] = “\\”) then
       svTempString = svPath;
       StrSub(svPath,svTempString,0,2);
    else
       StrRemoveLastSlash(svPath);
    endif;
13.12  StrSub
语法:StrSub (svSubStr, szString, nStart, nLength);
说明: StrSub函数拷贝szString指定的字符串的部分,从nStart指定的位置开始。参数nLength指定要拷贝的字符数。
参数:
svSubStr
返回从szString拷贝的子串。
szString
指定要从中拷贝子串的字符串。
nStart
指定一个szString中的偏移量来标识要被拷贝的第一个字符。注意szString中的第一个字符的位置是0。如果传递给nStart的值等于或大于szString的长度,在svSubStr返回一个空字符串。
nLength
指定从szString拷贝的字符数。如果该值指定了多于nStart和szString结尾之间的字符数,在svSubStr返回从nStart到字符串结尾的所有字符。
返回值:
X:X等于svSubStr的字符数。
13.13  StrToLower
语法:StrToLower (svTarget, szSource);
说明:StrToLower函数将一个字符串中的所有字母转换为小写。该函数不影响非字母字符。
参数:
svTarget
返回szSource中的字符串,其所有字符均已转换为小写。
szSource
指定均要转换为小写字符的字符串。
返回值:
0:表明函数成功修改了字符串的大小写。
< 0:表明函数未能修改了字符串的大小写。
13.14  StrToNum
语法:StrToNum (nvVar, szString);
说明:StrToNum函数将一个字符串转换为一个数字,与C函数atol()相似。它检查svString,从位置0的字符开始,在字符串中继续直到它到达字符串结尾或遇到一个不在”0″..”9″范围内的一个字符。(字符串中的第一个字符可能是一个加号或减号。)将出现下列处理过程:
如果字符串中的所有字符在”0″..”9″范围中,由字符串代表的数字赋给nvVar。
如果字符串以一个或多个”0″..”9″范围内的字符开始但也包含一个或多个非数字字符,则将出现的第一个非数字字符的左边的所有字符赋给nvVar。例如,如果szString是 “-123ABC456″, nvResult将是 –123。
如果字符串的第一个字符不在”0″..”9″范围内并且不是一个加号或减号,该函数失败。
如果字符串的第一个字符是一个加号或减号,并且第二个字符不在”0″..”9″范围内,该函数失败。
参数:
nvVar
返回从szString的字符串生成的数字。
szString
指定要转换为一个数字的字符串。
返回值:
0:表明函数成功将字符串转换为数值型值。
< 0:表明函数未能将字符串转换为数值型值。
13.15  StrToUpper
语法:StrToUpper (svTarget, szSource);
说明:StrToUpper函数将一个字符串中的所有字母转换为大写。该函数不影响非字母字符。
参数:
svTarget
返回szSource中的字符串,其所有字符均已转换为大写。
szSource
指定均要转换为大写字符的字符串。
返回值:
0:表明函数成功修改了字符串的大小写。
< 0:表明函数未能修改了字符串的大小写。

InstallShield内部库函数全集十一-INI文件函数(中文版)


  发表时间:2004-8-10
作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载]
  


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 = szOrigValue,,并置换该行。如果它没有找到,它就在szSectionName段开始添加zKeyName = szReplaceValue行。
  如果你添加唯一键(就是,对一个给定的段,所有键都不同),使用WriteProfString函数。使用该函数只置换非唯一键名,如System.ini文件中的device=行。
  对.ini文件所做的修改可以存入卸载记录中。然而,必须知道一些重要的限制。更多信息,可查看卸载.ini文件的条目。
参数:
szFileName
指定要置换配置字符串的.ini文件的名称。如果szFileName是未限定名(也就是,不包括一个驱动器指示符和路径),InstallShield在Windows文件夹中查找该文件。如果文件不存在,它被在指定文件夹中创建,如果文件名中不包括路径,该文件被创建在Windows文件夹中。注意如果文件名限定在一个不存在的路径中,ReplaceProfString将失败。
szSectionName
指定.ini文件中的一个段名,从中查找szKeyName。段名必须不被包围在定界中括号中([ ])。查找该段名时不区分大小写。
szKeyName
指定要被置换的键名。如果该键不存在,则被创建。
szOrigValue
标识由szKeyName指定的键的当前值。
szReplaceValue
指定赋给szKeyName的新值。该参数的值将显示在配置字符串(szKeyName = szValue)等号右边。
返回值:
0:表明函数成功置换或添加配置字符串。
< 0:表明函数未能置换或添加配置字符串。
注解:
·Windows .ini是文本文件。你必须在每个操作系统中使用InstallShield的合适版本。
11.6  WriteProfInt
语法:WriteProfInt (szFileName, szSectionName, szKeyName, iValue);
说明:WriteProfInt函数通过插入或更新一个配置字符串(整型值赋给键),来修改一个.ini文件。注意下列要点:
因为Windows 高速缓存保存文件的方法改变,你必须在调用WriteProfString后刷新高速缓存。(看下面的注解部分。)
对.ini文件所做的修改可以存入到卸载记录中。然而,必须知道一些重要的限制。更多信息,可查看卸载.ini文件的条目。
为写一个字符串值到一个.ini文件,则调用WriteProfString。
当你想修改System.ini文件时使用AddProfString 和 ReplaceProfString函数。
参数:
szFileName
指定要置换配置字符串的.ini文件的名称。如果szFileName是未限定名(也就是,不包括一个驱动器指示符和路径),InstallShield在Windows文件夹中查找该文件。如果文件不存在,它被在指定文件夹中创建,如果文件名中不包括路径,该文件被创建在Windows文件夹中。注意如果文件名限定在一个不存在的路径中,Write ProfInt将失败。
szSectionName
指定.ini文件中的一个段名,szKeyName将要被插入其中或将要被修改。段名必须不被包围在定界中括号中([ ])。查找该段名时不区分大小写。
szKeyName
指定要更新的唯一键。如果要被更新的键不存在于指定段中,则它被创建。
为从一个.ini文件中删除一整个段,给参数szKeyName传递一个空字符串。为从一个.ini文件的一个段中删除一个或多个键,使用WriteProfString。
iValue
指定赋给由szKeyName标识的唯一键的整型值。
返回值:
0:表明函数成功更新指定的.ini文件。
< 0:表明函数未能更新指定的.ini文件。
注解:
·WriteProfInt函数使用Windows API WritePrivateProfileString来访问.ini文件。因此,它的函数功能性受Windows API提供的函数功能的限制。.ini文件的更多信息可查询Microsoft Windows手册。
·.ini文件在Windows 95及更高版本下被放在高速缓存中,这种特性可能导致延迟将修改写到指定文件。这接着可能妨碍随后的文件操作,如调用CopyFile 和 XCopyFile。因此如果你随后要用到文件操作,则你必须在使用 WriteProfInt后,刷新高速缓存。简单地以空参数调用WriteProfInt来强制Windows 95 及更高版本立即写数据到.ini文件,如下所示:
   WriteProfInt (“c:\\test.ini”, “Windows”, “KeyboardDelay”, 100);
   WriteProfInt (“”,”",”",0); file://null string (“”) in first three parameters
   file://CopyFile should now have access to updated file.
   CopyFile (“c:\\test.ini”, “d:\\test.ini”);
11.7  WriteProfString
语法:WriteProfString (szFileName, szSectionName, szKeyName, szValue);
说明:WriteProfString函数写一个配置字符串到一个.ini文件。根据传递给WriteProfString的值,它可以创建一个段,删除一整个段,创建一个唯一的KEY=VALUE条目,删除一个KEY=VALUE条目,或更新一个键的值。
注意要点同WriteProfInt中的注意要点。
参数:
szFileName
指定.ini文件的名称。如果szFileName是未限定名(也就是,不包括一个驱动器指示符和路径),InstallShield在Windows文件夹中查找该文件。如果文件不存在,它被在指定文件夹中创建,如果文件名中不包括路径,该文件被创建在Windows文件夹中。注意如果文件名限定在一个不存在的路径中,Write ProfString将失败。
szSectionName
指定.ini文件中的一个段名,szKeyName将要被插入其中或将要被修改。段名必须不被包围在定界中括号中([ ])。查找该段名时不区分大小写。
szKeyName
指定要更新或删除的唯一键。如果要被更新的键不存在于指定段中,则它被创建。为删除该键,给参数szValue传递一个空字符串。为删除由szSectionName指定的整个段(包括它里面的所有条目),给参数szKeyName传递一个空字符串。
szValue
指定赋给由szKeyNamw标识的唯一键的值。为删除该键,给该参数传递一个空字符串。为删除该键的值而保留键本身,则给该键传递一个空格。
返回值:
0:表明函数成功写字符串到指定的.ini文件。
< 0:表明函数未能写字符串到指定的.ini文件。
注解:
请参阅WriteProfInt的注解。

InstallShield内部库函数全集十-长文件名函数(中文版)


  发表时间:2004-8-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来指定一个新目录。