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