Compress The VC Application Program

【转】
InstallShield 中文函数解释
外壳函数
    外壳函数创建新的程序文件夹,删除存在的程序文件夹,添加项目到存在的程序文件夹。在安装的最后,添加应用程序到适当的程序文件夹以允许用户立即访问你的软件。下列函数也支持不同的图标选项。
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返回它。
posted @ 2013-01-11 09:08  CBDoctor  阅读(350)  评论(0编辑  收藏  举报