1 库函数综述
InstallShield包含300多个内部库函数,用户可在安装脚本中调用它们来创建程序组,操作文件夹,处理目录,监督安装状态,创建对话框,操作文件及其它更多工作。因为InstallShield脚本编译器已经识别这些库函数名,所以用户在使用它们之前无须说明。
为了成功调用一个内部库函数,用户必须知道库函数名称及使用格式。InstallShield 库函数参阅附录D库函数索引。在接下去的几节中我们将对其中主要的一些库函数作详细介绍。在这里先简单向用户描述一下库函数的构成。
如:AskYesNo是一个库函数,它在对话框中显示一个询问,然后等待最终用户通过点击按扭来响应,Yes或No。AskYesNo格式如下: AskYesNo(szQuestion,nDefault)。这个格式显示了正确的函数名,括号中显示了函数的参数列表。在函数的详细说明帮助中,每个参数用匈牙利标记法表示,指出每个参数位置上可被接受的数值类型。AskYesNo要求两个参数:第一个是字符类型,第二个是数值型。
与C语言一样,InstallShield区分大小写,因此用户要严格注意库函数名称中大写字母。
在用户的脚本中使用任何库函数,传递的参数数目一定要正确,并且要确保传递的每个参数值符合该位置规定的类型。如果用户传递了错误的参数数目或者在任何一个或几个参数位置传递了不相符的数值类型,脚本都不能被编译。
注意:
.作为参数传递的字符串必须包括在单引号或者双引号内。
如:“Please wait while files are transferred”,或‘This is a string’或“c:\Myfolder\myfile.txt”
.InstallShield 不允许将一个赋值语句作为参数传递。另外,用户在一个函数变量中不能使用&&或||运算符。
.由一个调用传递给一个函数的可变长字符串变量在被调用函数中不能自变长。如果函数试图赋一个值,该值的长度超过参数的现有长度,则会发生401运行错误。为避免这个错误,在调用将字符串传递给一个函数时就要为字符串指定一个特定长度。
2 用户界面函数
用户界面函数允许用户自定义特定的错误信息及错误框标题。然而,一些在安装开发中遇到的内部错误信息是不能由用户界面函数来修改的。这部分主要对用户界面函数的语法、描述、参数等作详细说明。
2.1 Disable函数
语法:Disable(nConstant)
说明:Disable函数使由参数nConstant指定的用户界面对象或安装特性无效。
参数:
nConstant
指定用户界面对象或可操作特性使其无效,在这个参数位置传递下列预定义常量之一:
BACKBUTTON:使在一些内部对话框中显示的Back按钮无效(即使其变灰显示),Back按钮缺省置为有效。
BACKGROUND:使安装主背景窗口无效且隐藏。注意:当安装处于全屏幕方式时该参数不起作用。
BILLBOARD:在安装过程中取消布告板的显示。
DIALOGCACHE:使对话缓冲机制无效。有关对话缓冲的详细说明,请参阅Enable。
HOURGLASS:使光标由一个“忙”光标(缺省为沙漏光标)改变为标准光标(缺省为一个指针)。
INDVFILESTATUS:使路径及文件名在文件传输时不显示在进度指示器(状态条)中。
LOGGING:不记录卸载信息,使信息不记录在卸载日志文件中。注意:记录功能由函数DeinstallStart自动置为有效。在调用DeinstallStart之前置记录卸载信息无效将不起任何作用,因为当DeinstallStart被调用时,记录功能将被自动激活,用户必须就在不应被记录的卸载操作执行之前手控禁止记录。
NEXTBUTTON:使一些内部对话框的Next按钮无效(使其变灰显示)。Next按钮缺省置为有效。
SELFREGISTERBATCH:使注册自注册文件的批处理方法无效。详细说明请参阅Enable。
SATAUS:使标准进展指示器(状态条)无效且隐藏。
STATUSDLG:使对话框形式的进展指示器(状态条)无效且隐藏。
STATUSEX:禁止以显示安装状态对话框来取代进度指示器(状态条)。
STATUSOLD:使原风格的进度指示器(状态条)无效且隐藏。
返回值:
0:说明函数成功禁止了由参数nConstant指定的用户界面对象或安装特性。
<0:说明函数未能禁止由参数nConstant指定的用户界面对象或安装特性。
注解:
·如果用户的脚本中调用Disable函数来禁用Next或Back按钮,那么在函数被调用后的所有对话框中该按钮均被禁用,为激活Next或Back按钮,用户需带相应的常量来调用Enable。
·DIALOGCACHE在没有Next 或Back按钮的对话框中不起作用。
2.2 Enable函数
语法:Enable (nConstant);
说明:Enable函数激活由参数nConstant指定的用户界面对象或安装特性。
参数:
nConstant
指定你要激活的用户界面对象或操作特性。在该参数位置传递下列预定义常量之一:
BACKBUTTON:激活显示在一些内部对话框中的Back按扭。缺省时Back按扭是被激活的,但可以通过调用Disable函数来禁用它。
BACKGROUND:当安装是在窗口方式时,显示安装主背景窗口。当安装是缺省的全屏幕方式时,该常量没有作用。为激活窗口方式,你必须以常量DEFWINDOWMODE或 FULLWINDOWMODE来调用Enable。
DEFWINDOWMODE:配置主背景窗口为一个有标题栏的标准窗口。如果背景窗口被激活,它的外观将会立即改变。如果背景窗口被禁用,屏幕不会被修改直到带常量BACKGROUND调用Enable时。
DIALOGCACHE:激活对话框缓冲机制,它可以消除在显示对话框之间出现的屏幕闪烁。这种屏幕闪烁在运行于窗口方式的安装的标题栏中特别明显。注意对话框缓冲机制仅工作于有BACK和NEXT按扭的对话框。缺省时对话框缓冲被禁用。
FULLWINDOWMODE:设置主背景窗口为一个有标题栏的最大化窗口。如果背景窗口被激活,它的外观将会立即改变。如果背景窗口被禁用,屏幕不会被修改直到带常量BACKGROUND来调用Enable时。
HOURGLASS:使光标改变为“忙”光标,缺省为一个沙漏光标。
INDVFILESTATUS:当调用ComponentTransferData、 CopyFile、 或XcopyFile并且进度指示器被激活时,激活显示每个文件的全限定名(在进度指示器的第二行中显示)。注意,在一个运行基于事件的脚本的安装程序中,ComponentTransferData被自动调用。
LOGGING:激活存入卸载记录功能。当存入功能被激活时,InstallShield存入的卸载记录的操作结果将被记录在卸载日志文件中,并将在卸载过程中被反向。自动调用DeinstallStart激活存入功能;因此,你不需要手动激活存入功能除非你先前用Disable函数禁用了它。
NEXTBUTTON:激活显示在一些内部对话框中的Next按扭。Next 按扭缺省为激活。
SELFREGISTERBATCH:激活注册自注册文件的批处理方法。该方法使用来避免和自注册文件相关联的依赖性问题。缺省为标准(非批处理)自注册。
有关批处理方法的更多信息如下:
·在文件组窗格中,高亮显示你的自注册文件的文件组文件夹。它的属性表在打开在右边。
·双击Self-Registered域,则自注册页打开。
·选择"Yes, all the files in this file group are self-registering"单选钮。
·打开你的安装脚本(在Scripts窗格中找到Setup.rul)。
` 在你传输文件前,以SELFREGISTERBATCH选项调用Enable函数。所有自注册文件放在一个内部队列中,也就是,当它们被安装时它们会被立即注册。(在一个使用基于事件脚本的安装程序中,OnBegin处理程序被调用前,Enable(SELFREGISTERBATCH)会被自动调用。)
传输文件后,以SELFREGISTRATIONPROCESS选项调用Do函数。当你调用Do(SELFREGISTRATIONPROCESS)时,InstallShield注册所有自注册文件。如果当Do被调用时,系统变量BATCH_INSTALL等于TRUE(表明需要一个重启来完成该安装),则注册自注册文件被延迟到重启后。
在你调用Do(SELFREGISTRATIONPROCESS)后,你可以检查自注册是否成功。如果因任何原因Do失败了,它会返回-1。那些自注册失败的文件的名称被保存在系统变量ERRORFILENAME中,由一个分号分隔。
例如,下列代码将所有自注册文件注册在文件媒体库中。
// Enable batch method to queue self-registering files.
Enable ( SELFREGISTERBATCH );
// Install files.
nResult = ComponentTransferData( MEDIA );
// Register the files, check for errors.
if Do ( SELFREGISTRATIONPROCESS ) < 0 then
szMsg = "File(s) failed to self-register: \n" + ERRORFILENAME;
MessageBox (szMsg, WARNING);
endif;
STATUS:激活显示标准进度指示器(状态栏)。
STATUSDLG:激活显示对话框风格的进度指示器(状态栏)。
STATUSEX:激活显示安装状态对话框来取代进度指示器(状态栏)。
STATUSOLD:激活显示旧风格进度指示器(状态栏),它没有一个 Cancel按扭。
返回值:
0:表明函数成功激活由参数nConstant指定的用户界面对象或安装特性。
< 0:表明函数未能激活由参数nConstant指定的用户界面对象或安装特性。
注解:
·缺省时,安装运行在全屏方式;主背景窗口显示为一个没有标题栏的全屏窗口。这种方式中,主安装窗口不能被调整大小并且没有一个可见的标题栏。为激活窗口方式,你必须以常量DEFWINDOWMODE 或 FULLWINDOWMODE来调用Enable。
·如果你的脚本中调用Disable函数来禁用Next或Back按钮,那么在函数被调用后的所有对话框中该按钮均被禁用,为激活Next或Back按钮,你需带相应的常量来调用Enable。
·DIALOGCACHE在没有Next 或Back按钮的对话框中不起作用。
2.3 FindWindow
语法:FindWindow (szClassName, szWinName);
说明:FindWindow 函数通过指定一个窗口的窗口类和窗口名为高级开发人员提供一个得到窗口句柄的方法。如果你知道了一个应用程序的窗口类和窗口名,就可得到它的句柄。然后你可以通过这个句柄直接发送信息给该窗口。
参数:
szClassName
指定窗口所属类的名字。若指定为“任意类”,则在该参数处传递一个空字符串。
szWinName
指定窗口标题。为返回指定类中最顶层窗口的句柄,在该参数处传递一个空字符串(“”)。
返回值:
XXXX:窗口的句柄。
NULL (0):FindWindow根据指定的窗口名和类名不能找到该窗口。
注解:
·要找到一个窗口的类和名字,可运行Microsoft Spy.exe程序。
2.4 PlaceBitmap
语法:PlaceBitmap (szName, nID_BITMAP, nDx, nDy, nDrawOp);
说明:PlaceBitmap函数在安装窗口中插入一个图象。图象来源由szName指定,它可以是一个位图文件(.bmp),图元文件(.wmf),或者是动态链接库(.dll)。InstallShield支持2色、16色、256色和真彩色位图(bitmap)。2色、16色、256色位图可有透明部分。
透明位图在显示可与背景窗口组合显示的图象时有用。在位图中与指定的透明色匹配的像素不会被显示;在该位置的背景像素保持可见。在安装中,一个有技巧的设计常常用包含有公司名称和徽标的透明位图来作为安装窗口的标题。
为指定一个透明位图,你必须给参数nDrawOp位置传递一个常量BITMAPICON。你也必须考虑在一个位图中什么颜色被置为透明。缺省的透明色是purple(RGB(255,0,255))。要指定一个不同的透明色,可用下面描述的参数szName来指定。
因为图元文件(metafile)是绘制的,而不是放置的,它们固有为透明。如果BITMAPICON被指定为一个图元文件,则该参数被忽略。
通过使用SetDisplayEffect函数可以显示非透明位图的许多特殊显示效果。该函数也为图元文件提供了有限的显示效果。
窗口中位图的位置可以用两种方法中的一种来指定:
·通过参数nDrawOp来传递位置常数。
·通过参数nDx与nDy来传递距安装窗口边缘的垂直和水平位移。
通常可通过调用PlaceBitmap(将参数nDrawOp设置为REMOVE)来删除任何不再需要的位图文件和图元文件。建议删除不需要的位图,即使该位图可以被其他位图完全覆盖,因为第一个位图的调色板入口只有在位图被删除后才会被释放。
一个真彩色位图显示在一个运行于16色或256色模式的系统上时,只用那些在调色板中有效的颜色;不会给位图分配附加的颜色,即使附加调色板入口是有效的。若你希望含有24位位图的安装可在16色或256色的系统中运行,需要包含该位图的16色或256色的版本。然后在选择要显示的位图前带参数COLORS调用GetSystemInfo来确定当前颜色模式。
参数:
szName
指定要被显示图象的位图文件、图元文件的全限定名或动态链接。InstallShield通过扩展名来识别位图文件和图元文件。位图文件必须有扩展名.bmp,图元文件必须有扩展名.wmf.动态链接必须有扩展名.dll。如果一个文件名指定为没有扩展名,InstallShield将假定其扩展名为.dll。
为指定一个候选透明色,在文件名后放置一个分号(;),后随一组RGB颜色值(RGB颜色由三个数值指定,由逗号分隔)。该颜色被用作由szName指定的位图的透明色。注意它对于已经被显示的位图不起作用,也不会成为随后调用PlaceBitmap而显示的位图的缺省透明色。
下面的参数指定白色为透明色:
SUPPORTDIR ^ "Bitmap.bmp;255,255,255"
当nDrawOptions设置为 REMOVE时,该参数被忽略。
nID_BITMAP
指定驻留在一个.dll中的位图的资源ID。如果位图的源点是图元文件或位图文件,指定一个在当前显示的图象中没有使用的数值;所有同时显示的图象必须有其唯一的ID号。当nDrawOptions设置为REMOVE,该参数必须包含显示的图象的ID。
nDx
当nDrawOp设置为LOWER_LEFT, LOWER_RIGHT, UPPER_LEFT, 或 UPPER_RIGHT时以像素点指定安装窗口边缘和图象边缘之间的水平距离;否则该参数被忽略。
nDy
当nDrawOp设置为LOWER_LEFT, LOWER_RIGHT, UPPER_LEFT, 或 UPPER_RIGHT时以像素点指定安装窗口边缘和图象边缘之间的垂直距离;否则该参数被忽略。
nDrawOp
指定位图放置的位置,设置放置选项,或者删除先前放置的位图。给该参数传递下列预定义好的常数:
BITMAPICON:指出位图有透明部分。用户可以用按位或运算符(|)来将该常量和其他常量(除TILED、FULLSCREEN或FULLSCREENSIZE外)组合。当BITMAPICON和那些常量之一组合时,按位或运算被忽略,而只使用BITMAPICON。
TILED:位图在主安装窗口平铺。该常量通常被用来创建一个安装背景。当该常量被指定时,即使位置选项被忽略,特殊效果已被SetDisplaytEffect激活,位图仍正常显示。
FULLSCREEN:拖拉图象使其填充整个安装窗口。拖拉时图象不会被调整大小。如果一个位图图象比InstallShield主窗口小,它在窗口中被置中,背景由当前背景色填充。缺省值为深青色(teal);可以通过使用SetColor函数来改变。当这个常量被指定时,位置选项被忽略,即使一个特殊效果已经被SetDisplayEffect激活,位图仍正常显示。
FULLSCREENSIZE:拖拉和伸展图象使其填充满整个安装窗口。当这个常量被指定时,位置选项被忽略,即使一个特殊效果已经被SetDisplayEffect激活,位图仍正常显示。
CENTERED:将位图置于InstallShield安装窗口的中央。
LOWER_LEFT:将位图置于InstallShield安装窗口的左下角。
LOWER_RIGHT:将位图置于InstallShield安装窗口的右下角。
UPPER_LEFT:将位图置于InstallShield安装窗口的左上角。
UPPER_RIGHT:将位图置于InstallShield安装窗口的右上角。
REMOVE:删除一个先前放置的位图或图元。任何由SetDisplayEffect激活的特殊效果被忽略。
返回值:
0:表明函数成功找到和放置图象。
< 0:表明函数未能找到或放置图象。
注解:
·调用SetDisplayEffect来为非平铺、全屏幕、透明位图设置特殊效果;用户也可以用它为图元设置有限的特殊效果。
·InstallShield不支持24位透明位图。如果用户在一个24位位图中包含了透明色而且指定了BITMAPICON常量,该颜色将被正常显示。
·当你在运行256色模式的系统中放置一个256色的位图时,InstallShield将试图分配位图的调色板到系统调色板。如果多个256色位图被放置,InstallShield将试图将所有可视位图的调色板合并到系统调色板,优先为最近放置的位图。这种行为可能导致在其他位图被显示时先前放置的位图改变颜色。
·在一个运行在有256色抖动背景的256色模式的系统中,含有许多颜色的位图可能导致一些给背景使用的调色板入口被重新分配;这可引起在背景中出现一种梯度效果。如果安装中包含了使用多种颜色的位图,则当它们运行在256色系统中时应不要使用256色抖动背景。
·系统调色板仅存在于运行在256色模式的系统中。运行在windows 95和其后高彩色或者真彩色模式下的系统及运行在65525(16位)色模式Windows NT下的系统中都没有系统调色板。这些系统中不用考虑调色板句柄问题。颜色使用RGB值来直接显示。
·因为图元文件是被着色的,它们不包括一个自定义调色板。当一个图元文件在一个256色系统中显示时,不发生调色板处理;图元文件是用当前调色板中有用的颜色绘制而成。由此,若要运行在256色系统中,用户在安装程序中不应该使用显示颜色不同于标准16色的图元文件。
2.5 PlaceWindow
语法:PlaceWindow (nObject, nDx, nDy, nCorner);
说明:PlaceWindow函数改变用户界面对象的位置,包括布告牌。用nDx和nDy指定对象的边与屏幕边缘的距离。
参数:
nObject
指定要被改变位置的对象。在该参数位置传递下列预定义的常量之一:
BACKGROUND:移动背景窗口。
BILLBOARD:设置在文件传输过程中使用的布告牌的位置。
MMEDIA_AVI:设置要播放的下一个AVI文件的窗口位置。缺省时,AVI文件将在InstallShield客户窗口的左边位置窗口中播放,从左起10个像素点,从上起10个像素点。
STATUS:移动进度指示器。
STATUSDLG:移动对话框风格的进度指示器。
STATUSEX:移动安装状态对话框。
STATUSOLD:移动旧风格的进度指示器。
当你调用PlaceWindow来移动进度指示器或者状态对话框时,确信为你在安装中激活的反馈对象传递了正确常量。例如,如果你调用了Enable(STATUSOLD),则你必须传递STATUSOLD给PlaceWindow。
nDx
以像素点指定对象的边与屏幕边缘之间的水平距离。
nDy
以像素点指定对象的边与屏幕边缘之间的垂直距离。
nCorner
指定用nDx和nDy表示的距离是从哪个角度量所得。在该参数位置传递下列预定义的常量之一:
LOWER_LEFT:从InstallShield主窗口的左边度量得nDx,从底端度量得nDy。
LOWER_RIGHT:从InstallShield主窗口的右边度量得nDx,从底端度量得nDy。
UPPER_LEFT:从InstallShield主窗口的左边度量得nDx,从顶端度量得nDy。
UPPER_RIGHT:从InstallShield主窗口的右边度量得nDx,从顶端度量得nDy。
返回值:
0:表明函数成功改变了对象的位置。
< 0:表明函数未能改变对象的位置。
注解:
·使用该函数时要意识到一个安装程序要运行在不同的屏幕分辨率下。你在放置对象前可能要确定屏幕范围。距离以像素点度量,是对象边缘与指定的屏幕角落边缘之间的距离。
·用户不能用该函数定位消息框,因为消息框是由本机的Windows/PM API创建。一个消息框的位置由Windows/PM确定,而不是在InstallShield控制之下。另外,用户不能用该函数定位一个自定义对话框。
2.6 PlayMMedia
语法:PlayMMedia (nType, szFileName, nOperation, nReserved);
说明: PlayMMedia函数播放一个声音或AVI文件。MIDI或WAVE类型的声音文件和AVI(视频)文件既可以以同步方式也可以以异步方式播放。该函数也可以被用来连续播放一个文件。为了实现这个目的,一个标志可被按位或,来指示该文件以连续方式被播放。
由于 AVI文件早被压缩而且往往大于1.4MB的软盘,因此,视频显示推荐于光盘安装。
参数:
nType
指定文件类型。在该参数位置传递下列预定义的常量之一:
MMEDIA_WAVE:文件是WAVE声音格式。
MMEDIA_MIDI:文件是MIDI声音格式。
MMEDIA_AVI:文件是一个AVI文件。
szFileName
指定要播放的声音/AVI文件的全限定名。
nOperation
指定播放方式。在该参数位置传递下列预定义的常量:
MMEDIA_PLAYSYNCH:同步播放。
MMEDIA_PLAYASYNCH:异步播放。该常量可以用或运算符(|)与MMEDIA_PLAYCONTINUOUS组合使用。
MMEDIA_PLAYCONTINUOUS:连续循环播放。当以同步方式播放一个声音/AVI文件时不能使用该值。它只使用于以异步方式播放的文件。用或运算符(|)将它与MMEDIA_PLAYASYNCH组合使用。
MMEDIA_STOP:停止播放。
nReserved
给该参数传递0值,不允许其他值。
返回值:
0:表明函数成功播放文件。
< 0:表明函数不能播放文件。
2.7 RGB
语法:RGB (constRed, constGreen, constBlue);
说明:RGB函数创建一个自定义颜色值,该颜色可被SetColor和SetTitle使用。
参数:
constRed
指定一个数值型常数,值域为0..255,指示在自定义色中红色的数量。
constGreen
指定一个数值型常数,值域为0..255,指示在自定义色中绿色的数量。
constBlue
指定一个数值型常数,值域为0..255,指示在自定义色中蓝色的数量。
返回值:
该函数返回一个调用SetColor和SetTitle时可被使用的自定义颜色的数值。
2.8 SetColor
语法:SetColor (nObject, nColor);
说明:SetColor函数设置主安装窗口的背景色。
参数:
nObject
指定要改变的用户界面对象。在该参数位置传递下列预定义的常量:
BACKGROUND
指示安装窗口的背景。缺省颜色为纯深青色(solid teal):RGB(0,128,128)。
nColor
为背景指定一种颜色。
对于一种过渡背景色,可传递下列常量之一:
BK_BLUE、BK_GREEN、BK_MAGENTA、BK_ORANGE
BK_PINK、BK_RED、BK_YELLOW
对于一种纯背景色,可传递下列常量之一:
BK_SOLIDBLACK、BK_SOLIDBLUE、BK_SOLIDGREEN、BK_SOLIDMAGENTA
BK_SOLIDORANGE、BK_SOLIDPINK、BK_SOLIDRED、BK_SOLIDWHITE
BK_SOLIDYELLOW
对于一种自定义颜色,可在该参数位置传递RGB函数。
为了在使用自定义颜色绘制背景时得到光滑的效果(过渡),可将该颜色与预定义常量BK_SMOOTH按位或。注意当256色有效时光滑效果将更好。
返回值:
0:表明函数成功设置对象的颜色。
< 0:表明函数未能设置用户界面对象的颜色。
注解:
·当使用一个RGB值时,你可以应用Microsoft Windows的编程指南中描述的相同的方法。
你可以指定RED、GREEN、BLUE颜色的混合来“混合”颜色。用从0到255的数之一来表示使用颜色的数量。在RGB宏中的参数必须使用字面数值。你可以使用一个表示RGB颜色的长整型数来代替RGB语句。
2.9 SetDialogTitle
语法:SetDialogTitle (nDialogId, szTitle);
说明:SetDialogTitle函数改变显示在一些公用内部对话框标题栏的标题。用参数nDialogId指定对话框。如果你不使用SetDialogTitle,InstallShield显示缺省标题。一旦你为某一特定对话框设置了标题,除非你再次使用SetDialogTitle改变标题,否则InstallShield在每一个该类型对话框的实例中都使用该标题。
参数:
nDialogId
标识标题要被改变的内部对话框。在该参数位置传递下列预定义常量之一:
DLG_ASK_OPTIONS:改变AskOptions对话框标题。
DLG_ASK_PATH:改变AskPath对话框标题。
DLG_ASK_TEXT:改变AskText对话框标题。
DLG_ASK_YESNO:改变AskYesNo对话框标题。
DLG_ENTER_DISK:改变EnterDisk对话框标题。
DLG_MSG_INFORMATION:改变信息风格的消息框的标题。
DLG_MSG_SEVERE:改变严重警告风格的消息框的标题。
DLG_STATUS:改变对话风格进度指示器的标题。在带DLG_STATUS选项调用SetDialogTitle后,为了使标题修改有效,你必须通过调用Enable(STATUSDLG)来重新激活该对话风格进度指示器。
DLG_MSG_WARNING:改变警告风格的消息框的标题。
DLG_USER_CAPTION:当你使用用户定义的消息框风格时改变消息框的标题。
szTitle
指定新标题。
返回值:
0:表明函数成功修改了对话框标题。
< 0:表明函数未能修改对话框标题。
注解:
·你必须为每种你希望修改其标题的对话框分别调用SetDialogTitle。
·InstallShield使用标准Windows消息框函数创建消息框。Windows为这些消息框确定Ok和Cancel按扭文字。InstallShield不能控制在Windows 消息框中使用的按扭文字。
2.10 SetDisplayEffect
语法:SetDisplayEffect (nEffect);
说明:SetDisplayEffect函数指定用PlaceBitmap函数显示位图文件或图元文件时使用的显示效果。一旦显示效果被设定,所有随后由PlaceBitmap显示的位图文件将一直使用该效果显示,直到另一个对SetDisplayEffect的调用来设定一个新的显示效果。
参数:
nEffect
指定一个显示效果。在该参数位置传递下列预定义的常量之一。注意这些常量具有互斥性;它们相互之间不能使用按位或。而且,当用PlaceBitmap显示一个位图文件时指定了BITMAPICON、 FULLSCREEN、 FULLSCREENSIZE或 TILED时该参数无效:
EFF_FADE:位图或布告牌淡入淡出。
EFF_REVEAL:位图或布告牌逐渐从中央向四周填充。
EFF_HORZREVEAL:位图或布告牌从它的中央逐渐水平滚动出来。
EFF_HORZSTRIPE:位图或布告牌的一部分从外往里水平填充,然后剩余部分从中央部分往外填充。
EFF_VERTSTRIPE:位图或布告牌的一部分从外往里垂直填充,然后剩余部分从中央部分往外填充。
EFF_BOXSTRIPE:位图或布告牌的一部分从四周向里填充,剩余部分向四周填充。
EFF_NONE:该选项是缺省设置。使用它来清除调用其它任一选项后的显示效果。
只有EFF_REVEAL和EFF_HORZREVEAL可用于图元文件。
返回值:
0:表明函数成功设置显示效果。
< 0:表明函数未能设置显示效果。
注解:
·当位图是由PlaceBitmap带选项BITMAPICON、FULLSCREEN、FULLSCREENSIZE或TILED显示时,该位图不会按显示效果显示,而是正常显示。更多的信息可查阅PlaceBitmap。
·显示效果仅当放置位图时出现,当删除位图时不能使用显示效果。
·只有展示(EFF_REVEAL)和水平展示(EFF_HORZREVEAL)效果可用于图元文件。
2.11 SetErrorMsg
语法:SetErrorMsg (nErrorID, szText);
说明:SetErrorMsg函数定制InstallShield缺省错误信息。你可以使用该函数来指定显示这些错误信息的消息框的标题文本。
参数:
nErrorID
指定要替换的错误信息。在该参数位置传递下列预定义的常量之一:
ERR_BOX_BADPATH:当EnterDisk检测到一个由用户输入的错误路径时显示该信息。
ERR_BOX_BADTAGFILE:当EnterDisk检测到指定的标签文件不存在于磁盘上时显示该信息。
ERR_BOX_DISKID:当EnterDisk检测到由用户指定的驱动器不存在时显示该信息。
ERR_BOX_DRIVEOPEN:当EnterDisk检测到磁盘驱动器未关闭时显示该信息。
szText
指定要在消息框中显示的错误信息。
返回值:
0:表明函数成功改变错误信息。
< 0:
表明函数未能改变错误信息。
2.12 SetErrorTitle
语法:SetErrorTitle (nErrorID, szText);
说明:SerErrorTitle函数指定InstallShield内部错误消息框标题栏的自定义文本。你可以使用该函数来自定义错误消息文本。
参数:
nErrorID
指定标题要被替换的错误消息框。在该参数位置传递下列预定义的常量之一:
ERR_BOX_BADPATH:当EnterDisk检测到错误路径时显示该消息。
ERR_BOX_BADTAGFILE:当EnterDisk检测到指定的标签文件不存在于磁盘上时显示该消息。
ERR_BOX_DISKID:当EnterDisk检测到指定的驱动器不存在时显示该消息。
ERR_BOX_DRIVEOPEN:当EnterDisk检测到磁盘驱动器未关闭时显示该消息。
szText
指定显示在错误消息框中的标题。
返回值:
0:表明函数成功修改了标题栏的文本。
< 0:表明函数未能修改标题栏的文本。
2.13 SetFont
语法:SetFont (nItemID, nFontStyle, szFontName);
说明:SetFont函数设置显示的正文串的字体和风格。你可以在该函数使用标准Windows
字体。
参数:
nItemID
指定其字体和字体风格要被设置的项。在该参数位置传递下列预定义的常量:
FONT_TITLE:指定安装过程的主标题,该主标题显示在安装窗口的左上角。
nFontStyle
指定字体风格。在该参数位置传递下列预定义的一个或多个常量。除STYLE_NORMAL之外的所有常量可以用按位或来指定多种风格:
STYLE_NORMAL:没有加粗、倾斜或阴影(不能被按位或)。
STYLE_BOLD:字体加粗。
STYLE_ITALIC:字体倾斜。
STYLE_SHADOW:字体有阴影底纹。
STYLE_UNDERLINE:加下划线。
szFontName
指定一个有效的Windows字体的名称。有效的字体名称包括Courier, Helv, Helvetica, Modern, Roman, Script, Terminal, Times 和TmsRmn。如果指定的字体没有找到指定的风格,就使用Arial。
返回值:
0:表明函数成功设置字体。
< 0:表明函数未能设置字体。
2.14 SetStatusWindow
语法:SetStatusWindow (nPercent, szString);
说明:SetStatusWindows函数为进度指示器(状态条)设置完成指示器的百分比的初始值或当前值,并指定在进度指示器(状态条)最高行显示的当前消息。
通过调用ComponentTransferData或ComponentMoveData来传输文件的安装必须在文件传输开始之前调用SetStatusWindows,这是为了设置完成指示器百分比为0%而且清除指示器最高行。不再需要另外调用SetStatusWindows。每一个组件的文件被装入时,该组件的 ‘状态文本’字符串会在状态条最高行自动显示。
使用CopyeFile或XcopyFile函数装入文件的安装程序在相继调用CopyFile或XcopyFile之间,可能需要多次调用SetStatusWindows来改变指示器最高行的信息。
在传输文件前,你的安装程序还应该调用StatusUpdate函数激活文件传输过程中百分比完成指示器的自动更新。为了使得在状态条第二行显示正被安装文件的名称和路径,需在传输文件前带参数INDVFILESTATUS来调用Enable函数。在这些调用后,百分比完成指示器在文件传输过程中被平滑更新,每个文件的文件名在被传输时将显示。
参数:
nPercent
指定0到100之间的一个数值来表示百分比完成指示器显示的百分比。若要改变显示在状态条最高行的信息而不改变百分比完成指示器,则指定该参数为-1。
szString
指定显示在状态条最高行的字符串。注意如果一个'DisplayText'参数已被指定给该组件(在IDE中),那么当调用ComponentTransferData时该字符串将自动改写任何该参数指定的文本。
返回值:该函数没有返回值。
2.15 SetTitle
语法:SetTitle (szTitle, nPointSize, nColor);
说明:SetTitle函数根据nColor的值在主窗口标题栏或在主窗口内显示一个标题。
参数:
szTitle
指定在主窗口标题栏或主窗口内显示的一个标题。如果标题要显示在窗口的标题栏,你必须在第三个参数位置指定预定义常量BACKGROUNDCAPTION。如果一个标题栏的标题不符合可用空间,那将被从右截尾并以省略号终止。缺省标题栏标题为“安装”。
当给第三个参数传递一个颜色值时,标题在主窗口的顶端左对齐显示。相对主窗口太宽的标题将被从右截尾显示。为创建一个占据多行的标题,可在你希望的行断开处嵌入换行符。
nPointSize
以点数来指定一个在主窗口显示的标题的字号。建议字号为24点数。注意当第三个参数为BACKGROUNDCAPTION时该参数被忽略。
nColor
指定一个颜色或预定义常量BACKGROUNDCAPION。为指示szTitle值应该在主窗口标题栏显示,则在该参数位置传递预定义的常量BACKGROUNDCAPTION。当用户指定了BACKGROUNDCAPTION,nPointSize被忽略;标题栏标题的颜色和字号将由最终用户的系统设置决定。注意该选项在不运行在窗口模式的安装程序中无效;请查看下面的注解。
为指示szTitle值应该在主窗口中显示,通过在该参数位置传递下列预定义的常量之一来指定该标题的颜色:BLACK,BLUE,GREEN,MAGENTA,RED,YELLOW或WHITE。用户也可以在该参数位置传递RGB函数来指定自定义颜色,如下面例子所示:
SetTitle("FantasticApp", 24, RGB(78, 125, 161));
返回值:
0:表明函数成功设置安装的标题。
< 0:表明函数未能设置安装的标题。
注解:
·不运行于窗口模式下的安装中,第三个参数设置为BACKGROUNDCAPTION时调用SetTitle无效。为在一个标准窗口中运行安装程序,你必须首先以参数DEFWINDOWMODE或FULLWINDOWMODE来调用Enable,然后以参数BACKGROUND调用Enable来显示窗口。
·用SetColor来设置你安装的背景色。
·用SetFont来设置在背景窗口中显示的标题的字体和字体风格。
2.16 SizeWindow
语法:SizeWindow (nObject, nDx, nDy);
说明:使用SizeWindow函数来改变一个特定用户界面元件的大小。以像素点来指定新的
大小。
参数:
nObject
指定要调整大小的对象。在该参数位置传递下列预定义的常量之一:
BACKGROUND:标识为主背景窗口。
METAFILE:标识为在文件传输过程中使用的布告牌。SizeWindow不支持位图文件(.bmp)。该参数对用SdBitmap函数显示的图元文件不起任何作用。SdBitmap自动调整被显示的图元文件的大小。
MMEDIA_AVI:设置播放下一个AVI文件的窗口的大小。所有AVI视频以一个缺省大小来显示。改变大小可能会改变视频的有效分辨率和明快度。
nDx
以像素点指定对象的水平大小。
nDy
以像素点指定对象的垂直大小。
返回值:
0:表明函数成功调整窗口大小。
< 0:表明函数未能调整窗口大小。
注解:
·安装程序可能运行于多个不同的屏幕分辨率下。因此,你需要使用GetExtents函数来确定屏幕的全屏大小,然后在你的SizeWindows函数调用中参数使用比率来指定用户界面对象的大小。
·该函数仅推荐给高级开发人员。
2.17 StatusUpdate
语法:StatusUpdate (bLink, nFinalPercent);
说明:StatusUpdate函数激活或禁用文件传输操作和状态条进度指示器之间的连接。当bLink是ON,连接被激活并且nFinalPercent指示一个在下一个文件传输结束时显示的最后百分比。在文件传输过程中,状态条平滑地从它的当前值更新到由nFinalPercent指定的值。当bLink是OFF,连接被禁用并且状态条的进度指示器在随后的文件传输中不会被自动更新。
如果文件传输中状态条被激活,则在每次调用CopyFile 或 XcopyFile之前调用StatusUpdate。在调用ComponentTransferData传输文件之前,带参数为ON和100来调用StatusUpdate;这将使状态条在安装的文件传输阶段平滑更新到100%。注意在一个运行基于事件脚本的安装中,ComponentTransferData被自动调用。
参数:
bLink
指定是否激活或禁用文件传输操作和状态条进度指示器之间的连接。在该参数位置传递下列预定义常量之一:
ON:指定状态条的进度指示器必须和文件传输操作相连接。
OFF:指定禁用状态条的进度指示器和文件传输操作之间的连接。连接保持为禁用直到它通过一个随后对StatusUpdate带参数bLink为ON的调用而得到重新建立。
状态条可以通过调用SetStatusWindow而被手动更新。
nFinalPercent
指定当bLink为ON时,状态条的进度指示器在下一个文件传输操作结束时必须达到的最后百分比。如果传递给nFinalPercent的值小于状态条的进度指示器的当前值,则进度指示器不会改变。当bLink为OFF时,该参数被忽略。
返回值:
0:表明函数成功。
< 0:表明函数不成功。
注解:
·该函数通过计算由任何文件传输函数传递的总的字节数来工作。然后它计算从进度指示器的当前位置开始到nFinalPercent中的最大值,需每隔多久增加一次进度指示器。
·StatusUpdate函数不能和VerUpdateFile 、VerSearchAndUpdateFile一起工作。当调用那些函数时,你必须禁用状态条或手动更新它。
·为设置状态条到一个初始百分比,在调用StatusUpdate之前调用SetStatusWindow。
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的注解。
|