发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:16172, 日期:2001-08-13
打包和展开向导是一种工具,它能帮助您为 Visual Basic 应用程序创建包装成一个或多个 .cab 文件,cab 文件中包含了用户安装和运行应用程序所需的被压缩的工程文件和任何其它必需的文件,并将它们安装到最终用户的机器上?4虬?驼箍?虻冀?远?瓿墒勾唇ê筒渴鹫庑┪募?暮芏喙ぷ鳌?
您可以创建两种软件包,标准软件包或 Internet 软件包。如果计划通过磁盘、软盘,或网络共享来发布应用程序,则应创建一个标准软件包。如果计划通过 intranet 或 Internet 站点来发布,则应创建一个 Internet 软件包。您可以使用 Visual Basic 的打包和展开向导来创建到软盘、CD、本地或网络驱动器、以及 Web 上的软件包。
一、 标准软件包部分
如果使用打包和展开向导,向导将自动创建 Setup.lst 文件。如果需要自定义该文件,您可以在该文件被创建后,手工进行编辑。
Setup.lst 文件描述了为您的应用程序必须安装到用户机器上的所有文件,此外还包含了有关安装过程的关键信息。例如,Setup.lst 文件告诉系统每个文件的名称、安装位置、以及应如何进行注册等。Setup.lst 文件共有五个段:
BootStrap 段 - 列出了关于应用程序的核心信息,例如应用程序的主安装程序的名称、在安装过程中使用的临时目录、以及在安装过程的起始窗口出现的文字。
Setup1 Files 段 - 列出应用程序所需的所有其它文件,例如 .exe 文件、数据、以及文本。
Setup 段 - 包含应用程序中的其它文件需要的信息。
Icon Groups 段 - 包含了安装过程将创建的程序组的信息。这部分的每个成员都有一个与之相关的部分,包含了在这个程序组中要创建的图标。
BootStrap 段包含 setup.exe 文件安装和启动应用程序的主安装程序所需的所有信息。
注意 请记住,在安装过程中要用到两个安装程序:一个是 setup.exe,这是一个预安装程序;另一个是 setup1.exe,这是由安装工具包编译生成的。BootStrap 部分将为 setup.exe 文件提供指示。
BootStrap 段包含下述成员:
SetupTitle 当setup.exe 将文件复制到您的系统时所出现的对话框中显示的标题。 SetupText 当setup.exe 将文件复制到您的系统时所出现的对话框中显示的文字。 CabFile 应用程序的 .cab 文件的名称,或者,如果软件包有多个 .cab 文件,则表示第一个 .cab 文件的名称。 Spawn 当 setup.exe 完成处理后要启动的应用程序名称。在大多数实例中,这个名称将是 setup1.exe 文件。 TmpDir 存放在安装过程中产生的临时文件的位置。
Uninstall 用做卸载程序的应用程序名称。一般来说,该程序是 st6unst.exe,这个文件是由向导创建所有的软件包时自动打包加入的。
BootStrap Files 段 - 列出了主安装文件所需的所有文件。通常这部分只包括 Visual Basic 运行时文件。BootStrap Files 段列出了在加载您的应用程序和从属文件之前,必须加载入用户机器的所有文件。这些预安装的、或称为引导文件,包括运行任何 Visual Basic 应用程序所必需的核心文件,例如 Visual Basic 运行时 DLL (Msvbvm60.dll)。安装程序在安装和启动主安装程序之前将安装这些文件。
Setup1 Files 段包含了您的应用程序所必需的所有其它文件,例如 .exe ?募?⑹?荨⑽谋疽约按邮粑募?取0沧俺绦蚪?诎沧傲? Bootstrap Files 段所列出的核心文件之后安装这些文件。
Setup 段:Setup.lst 文件的 Setup 段是一个简单的列表,它列出了安装过程的其它部分所使用的信息。下表列出了 Setup 段所包含的信息。Title 将出现在安装期间的快速显示屏幕、“启动”菜单的程序组、以及程序项名称上的应用程序名称。 DefaultDir 缺省的安装目录。用户可以在安装过程中指定一个不同的目录。 ForceUseDefDir 如果为空,则会提示用户输入一个安装目录。如果设为 1,则应用程序将自动安装到 Setup.lst 的 "DefaultDir"所指定的目录中。 AppToUninstal 应用程序在“控制面板”中的“添加/删除程序”实用程序中出现的名称。AppExe 应用程序的可执行文件的名称,例如 Myapp.exe。
IconGroups 段包含了关于安装过程所创建的“启动”菜单的程序组的信息。每个要创建的程序组首先在 IconGroups 部分列出,然后指定一个单独部分(Group0, Group1, Group2, 等),在此部分中包含关于这个程序组的图标和标题的信息。程序组从 0 开始顺序编号。
1. 创建“启动”菜单的程序组
按照向导,选择“下一步”来到“启动菜单项”。先选中“programs”-“新建组”-输入“启动”-“新建项”-“输入您想加入启动项中的名称如“启动应用程序”,按“下一步”直至“完成”。
如图所示
打开生成的Step.lst文件,注意IconGroups 段中的条目及其相关的子段:
[IconGroups]
Group0=工程1
PrivateGroup0=True
Parent0=$(Programs)
Group1=启动
PrivateGroup1=False
Parent1=$(Programs)
[工程1]
Icon1="设置墙纸.EXE"
Title1=工程1
StartIn1=$(AppPath)
[启动]
Icon1="设置墙纸.exe"
Title1=设置启动程序
StartIn1=$(AppPath)
[Setup]
Title=工程1
DefaultDir=$(ProgramFiles)\工程1
AppExe=设置墙纸.EXE
AppToUninstall=设置墙纸.EXE
当您运行向导所创建的安装程序时,在“选择程序组”中会出现如图所示,您就可以把程序放在“启动程序组”中了。
如图所示
2. 提供一个联机帮助安装选项
除了使用安装工具包工程来创建您的自定义安装工程外,还可以将安装工具包工程与打包和展开向导一起使用。在这种情况下,您可以使用安装工具包工程来自定义安装过程的屏幕或其它部分,然后使用向导来创建和部署应用程序的软件包。例如,您可以提供一个联机帮助,而用户也可以不安装。可以按照您的需要添加任意的安装选项。您还可以将安装工具包与打包和展开向导一起使用,以便为安装工程添加对话框,提示用户指定是否安装应用程序的可选功能。
在 Setup1.vbp 工程中,编辑 setup1.frm 窗体中的 Form_Load 事件的代码。在调用 ShowBeginForm 函数 (Sub ShowBeginForm) 的代码块之后添加如下代码。
下面的示例显示了如何添加一个对话框,来询问用户是否要安装可选文件:
Dim LoadHelp As Integer
LoadHelp = MsgBox ("Do you want to install Help? ", vbYesNo)
If LoadHelp = vbYes Then
CalcDiskSpace "Help"
EndIf
注释: 包含 cIcons = CountIcons(strINI FILES) 的代码块
If LoadHelp = vbYes Then
cIcons = CountIcons("Help")
EndIf
注释: 包含 CopySection strINI_FILES 的代码块。
If LoadHelp = vbYes Then
CopySection "Help"
EndIf
注释: 包含 CreateIcons, strINI FILES, strGroupName 的代码块
关闭 Setup1.frm,保存该窗体以及安装工具包工程,并编译创建 Setup1.exe 文件。
运行打包和展开向导,并从主屏幕中选择“打包”。根据向导的各个屏幕进行适当的选择。对上面的示例,您可以在“添加和删除”屏幕中列出的“自定义”对话框中确认用户可以选择安装的所有可选文件。在完成打包和展开向导的所有操作后,将生成发布媒体。
对 Setup.lst 文件进行必要的更改。在上面的示例中,您可以在代码的 CopySection 部分所使用的部分中添加一个新的部分。在这种情况下,这个部分可能会象下面这样:
[Help]
File1=MyApp.HL1,MyApp.HLP,$(AppPath),,,10/12/96,2946967,0.0.0
部署并测试您的软件包。
当用户运行本过程所示示例的安装程序时,安装程序将所有的 BootStrap 文??粗频接没Щ?鳎?缓筇崾居没е该魇欠癜沧鞍镏?募?H绻?没а≡瘛笆恰保?? CalcDiskSpace 语句将确定在是否用户机器上是否有足够的磁盘空间来存放帮助文件。然后该程序安装 Setup.lst 中的 Setup1 Files 部分列出的所有文件。.接下来,程序将再测试一次 LoadHelp 标记。如果用户选择安装帮助文件,Setup1.exe 就开始为帮助文件执行 CopySection 语句,然后安装 Setup.lst 的 [Help] 部分所列的文件。
二、 Internet 软件包部分
Internet 软件包是基于 .cab 的安装程序、它是专为从 Web 站点下载而设计的。Internet Explorer 使用一个称为“Internet 部件下载”的过程来安装 Internet 应用程序。打包和展开向导自动包括其所创建的软件包所需的信息。您可以使用 Visual Basic 的打包和展开向导快速轻松地将您的 ActiveX 部件打包以供Internet 下载。打包和展开向导把部件打包成一个浏览器能识别的文件,并创建一个 Web 页面,用户可以从其中下载。然后您就可以将打包的结果部署到用户能存取的 Web 页面上了。
向导将部件及其所关联的文件打包到一个压缩的 (.cab) 文件中,供浏览器下载部件时使用。向导确定运行工程需要哪些文件,然后收集这些文件,将它们压缩为一个.cab 文件,并生成指向您的部件的 HTML;向导将打好包的文件部署到您选择的 Web 服务器位置上。
可以被打包供 Internet 部署的主要类型包括:在 Web 页上显示的 ActiveX 控件(.ocx 文件)、用于在客户或 Web 服务器上运行的 ActiveX .exe 或 .dll 文件、代替 Web 页显示的 ActiveX 文档、DHTML 应用程序,基于客户的、通过使用动态的 HTML 来链接 HTML 页与 Visual Basic 代码的应用程序、IIS 应用程序、基于服务器的、链接 HTML 页与 webclass 对象的应用程序Internet 软件包的部分。
Internet 软件包包括的主要文件有: 应用程序的主要 .cab 文件、所有必需的支持文件、应用程序的任何辅助 .cab 文件。主要 .cab 文件包括工程部件,例如应用程序的可执行文件或 DLL、或控件的 .ocx 文件、一个引用辅助 .cab 文件以及包含安全性和注册表信息的 .inf 文件,以及不属于辅助 .cab 文件的所有必需的从属文件;支持文件包括 HTML 文件、Active Server Pages (.asp) 文件、各种格式的图形文件或应用程序运行时必需访问的其它文件;辅助 .cab 文件提供了一个有效的途径,可以确保用户使用的是该部件的最新版本。如果辅助 .cab 文件中部件的较新版本已经可以从外部 Web 站点上获得,则下载您应用程序的用户将自动收到该部件的更新版本。
注意:如果不能或不愿意让应用程序的安装程序需要与 Internet 的连接,则可以将辅助 .cab 文件放置在您的 intranet 的服务器上。intranet 服务器通常提供了更快地下载,并允许用户从安全的网络下载。
在为供下载的 Internet 应用程序或部件打包之后,您就可以将其部署到 Web 服务器上的一个特定位置上了,用户可以从该位置访问这些应用程序或部件。通常,您的软件包被作为一个现存 Web 页面的一部分来引用,也就是说,您的控件或其它部件宿驻在一个 Web 页面上。当用户访问宿驻您软件包的 Web 页面时,系统将该软件包下载到用户的计算机上。该软件包在确认安全性、打开、注册、安装之后被激活。所有这些都发生在后台,并由浏览器控制。
在准备好供下载的 Internet 应用程序和部件后,必须将它们打包为一个可通过浏览器发布给用户的文件。此外,还必须执行一些安全性设置,以确保您的应用程序不会损害用户的计算机。这些步骤包括: 对部件进行数字署名,以便用户能验证部件的内容,并知道您是该软件的开发者;设置安全性级别来保证您的部件不会损害用户的计算机或毁坏其数据;为任何需要许可证的部件安排许可。当添加一个 ActiveX 控件到 Web 页面时,可以将其发布给从该页面下载该控件的任何用户。除非对该控件进行了许可,否则很难防止最终用户取走您的控件并在他们自己的应用程序中使用。许可证可以作为控件的一种版权,来防止未经授权的使用。
打包和展开向导在为 Internet 部件下载打包代码时创建两种类型的文件:发布文件和支持文件。发布文件放在启动向导时指定的目录中,该目录一般包含 .cab 文件和任何与之相关联的.htm 文件。注意:如果生成 .cab 文件后对工程进行了修改,例如修改文件列表,以使其包括在下载中或对部件进行数字签名,则需要重新生成 .cab 文件。向导为支持文件创建一个目录并把 .cab 的输入文件(.inf)放入该目录。此外,支持文件目录还包括 Diamond Directives (.ddf) 文件及其他下载需要的文件。
以下列出了向导创建的所有文件类型:
.cab文件是Windows 安装文件或包含.ocx 文件、.inf 文件和其他从属文件的“压缩包”文件。可以对它进行数字签名以防篡改。
.htm 文件是用于显示 Web 页面的 HTML 文件,该文件包含指向 .cab 文件的链接并用于启动下载过程。
.ddf 文件是Diamond Directives 文件,这是用于创建.cab 文件的工程文件。
.inf 文件是代码下载信息文件,该文件包含有关如何安装控件的信息,并允许自定义安装。
.ocx 文件是ActiveX 控件,可以对它进行数字签名以防篡改。
.dll 文件是ActiveX 文档或代码部件。
如下为向导自动创建的.htm 文件。
〈HTML〉
〈HEAD〉
〈TITLE〉记账单.CAB〈/TITLE〉
〈/HEAD〉
〈BODY〉
〈!--如果这页上的任何控件需要授权,您必须创建一个授权包文件。 运行 LPK_TOOL.EXE 来创建要求的 LPK 文件。 LPK_TOOL.EXE 将从 ActiveX SDK 中找到,http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 Visual Basic 6.0 CD, 您可以在\Tools\LPK_TOOL 目录下
下面是对象标记的例子:
〈OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331"〉
〈PARAM NAME="LPKPath" VALUE="LPKfilename.LPK"〉
〈/OBJECT〉
--〉
〈OBJECT ID="UserControl1"
CLASSID="CLSID:5D970D42-D857-11D2-A0A1-0080C8E2D955"
CODEBASE="记账单.CAB#version=1,1,0,91"〉
〈/OBJECT〉
〈/BODY〉
〈/HTML〉
示例中的第二个 OBJECT 标记包含了一个类标识符为 5D970D42-D857-11D2-A0A1-0080C8E2D955,版本号为1,0,0,1。您所创建的每个 ActiveX 控件都有一个不同的类标识符。此类标识符用于创建 HTML 页面上控件的实例,与将控件放置到 Visual Basic 窗体的过程类似。Internet Explorer 使用类标识符检查注册表来判断控件是否存在。当不存在或现有控件的版本比 CODEBASE 属性中指定的旧,Internet Explorer 将下载并安装指定的文件。
OBJECT 标记的重要部分包括:
CLASSID 类标识符,包含部件的类标识符。
ID 部件的名字,用于脚本中,与 Visual Basic 窗体中控件的 Name 属性相同。
CODEBASE 所需控件的最低版本号和安装位置。
由于Internet 软件包中问题比较多,向导中创建的文件往往不能正常工作,下面就常见的几个问题分析其原因及解决方法。
1、 程序不下载
问题表象:
在一个intranet网建立内部查询网页,服务器操作系统为Windows NT 4.0,在客户机上用VB 6.0的中文企业版生成一个ActiveX用户控件(*.OCX),文件存于服务器,在此客户机上通过IE 4.0浏览完全可运行此程序,然而在另一客户机上则无法运行此控件,用IE 4浏览时,屏幕上一个进度条窗口很快一闪而过,然后浏览器窗口什么也不显示。
问题解决:
问题出在打包程序生成HTML文件上。用记事本打来html文件可以发现,该文件使用FRAME调用html文件,这是不正确的。
在本地用IE打开html文件时,IE把SRC所指的文件按文件方式读入,IE可以识别html文件文件的结构并正确运行。可是从网上下载html文件时,IE通过Server接收html文件的数据。而在正常情况下,FRAME语句中的SRC所指应为一个HTML文档。这里,ActiveX 用户控件是利用〈FRAME SRC="..."〉调用的,这在本机浏览时不会遇到问题。但Internet Explorer在从服务器调用HTML时,它认为凡是出现在〈FRAME SRC="..."〉中的都应该是HTML文档,如果无法识别该文件,就下载并保存该文件。屏幕上一个进度条窗口很快一闪而过就是IE在下载文件。若要解决这个问题,不要使用〈FRAME SRC="..."〉,而改用〈A〉〈/A〉链接方式,一般就不会有问题了。
所以你只要修改html文件,用如下的方法调用就可以解决问题:
〈ahref=http://YourIpAddress.com/firstdoc.vbd〉test〈/a〉
把YourIpAddress.com改为你的地址并把html文件放入正确的目录中。
例如我们需要由Left.htm调用同一目录下的“记账单.htm”,可以使用如下方法。Left.htm内容如下:
〈head〉
〈link REL="STYLESHEET" TYPE="text/css" href="../TocSimple.css"〉
〈base target="right"〉
〈title〉费用管理菜单〈/title〉
〈/head〉
〈body topmargin="0" leftmargin="0" bgcolor="#8a7a5a"〉〈font color="beige" face style="BACKGROUND-COLOR: #dcc8aa"〉〈/font〉
〈table border="0" width="100%" cellspacing="0" cellpadding="5" height="100%"〉
〈tr〉
〈td width="100%" height="32" bgcolor="#dcc8aa"〉〈p align="center"〉
〈font color="beige"〉费用管理〈/font〉〈/p〉
〈/td〉
〈tr〉
〈td height="18" width="100%"〉
〈p align="center"〉〈font color="#ffffff"〉 〈a href="http://server/gfylbeta/money/Program/记账单.htm"〉医院记帐单〈/a〉〈/font〉〈/p〉
〈tr〉
〈/table〉
〈/body〉
〈/html〉
现在用IE打开记账单.htm并点击“医院记帐单”,记账单.htm就可以正确运行了。
〈/SCRIPT〉
2、 程序下载后却不运行
问题表象:
用Vb生成一个简单的ActiveX用户控件(*.OCX),并设定编译时版本自动加1,按照微软的提示编译成OCX文件,再用打包程序生成Internet下载程序,在本机上用IE 4.0浏览正常其他机器用IE 4浏览时却不运行,查看C:\WINDOWS\Downloaded Program Files及C:\WINDOWS\Temporary Internet Files目录从版本号可知下载程序已下载。
问题解决:
原因是ActiveX控件没有被正确安装在客户机上,还有一些所需要的文件并没有下载到客户机,此问题与Vb运行所需要的连接库有关。
你当然可以手工在客户机上安装这个控件,或者每一台机器上都安装一次Vb,但那样太麻烦并且很难保证版本一致性。我们还是借助向导来完成这一工作。
在向导选择“下一步”继续下去,直至“包含文件”项中。
由于您生成的ActiveX用户控件(*.OCX)中使用了别的一些控件,那么在下载时会自动寻找相关的一些文件,如果找不到,则程序不会下载。所以,我们需要把相关的一些文件手工地添加进去。
如图所示
由于该ActiveX用户控件(*.OCX)还引用了一些其他的相关一些文件(常见的有DLL、OCX、TLB等),如DATLSCHS.DLL、DBRPRCHS.DLL、FlashControls_Hefawu.ocx、MSADO20.TLB等。我们也需要为这些文件生成一个CAB文件,当该ActiveX用户控件(*.OCX)用到时会自动查找并下载。
在“包含文件”项中把您用到的相关文件选中,然后选择“下一步”,来到“文件源”中,将您所用到的一些相关文件在指定的目录中生成CAB文件。
重要提示:发布的DLL、OCX、TLB等文件要与生成的CAB文件同名!并且每一个相关的文件都要生成自己的CAB文件。
例如,选中FlashControls_Hefawu.ocx并选择“从其他web站点下载”项,然后输入您指定的目录位置 http://server/vb6/及生成的CAB文件,文件名为FlashControls_Hefawu.CAB。相应地,DATLSCHS.DLL对应为http://server/vb6/DATLSCHS.CAB;DBRPRCHS.DLL对应为http://server/vb6/DBRPRCHS.CAB,另外有些特别的如MSADO15.DLL对应为http://server/vb6/MSADO15.CAB ;VB6 Runtime AND OLE Automation对应为http://server/vb6/Vb6RUN.CAB 。当然,您自己要生成的ActiveX用户控件(*.OCX)要选择“包含在此压缩文件中”选项。
如图所示
最后,向导会建立两个文件:*.cab和*.htm,并且在http://server/vb6/目录中生成许多压缩包。*.cab文件包括了你的ActiveX控件,应该把它放在服务器上。*.htm其核心是修改Object标签的Codebase属性。这样用户机的IE 4.0在浏览时如果没有在客户机找到你的控件,就会利用Codebase属性从服务器上下载*.cab文件,并自动解包、安装并注册ActiveX控件。
打包和展开向导能够帮助您为自己的 Visual Basic 应用程序创建和发布专业的安装程序。除了为应用程序创建 .cab 文件之外,该向导还通过编译随 Visual Basic 一起安装的安装工具包工程来为应用程序创建安装程序。使您的程序在不同的计算机环境下都能“安居乐业”,的确是程序员的好帮手。
上述程序在中文Windows 98和 VB6.0中文企业版下调试通过。
您可以创建两种软件包,标准软件包或 Internet 软件包。如果计划通过磁盘、软盘,或网络共享来发布应用程序,则应创建一个标准软件包。如果计划通过 intranet 或 Internet 站点来发布,则应创建一个 Internet 软件包。您可以使用 Visual Basic 的打包和展开向导来创建到软盘、CD、本地或网络驱动器、以及 Web 上的软件包。
一、 标准软件包部分
如果使用打包和展开向导,向导将自动创建 Setup.lst 文件。如果需要自定义该文件,您可以在该文件被创建后,手工进行编辑。
Setup.lst 文件描述了为您的应用程序必须安装到用户机器上的所有文件,此外还包含了有关安装过程的关键信息。例如,Setup.lst 文件告诉系统每个文件的名称、安装位置、以及应如何进行注册等。Setup.lst 文件共有五个段:
BootStrap 段 - 列出了关于应用程序的核心信息,例如应用程序的主安装程序的名称、在安装过程中使用的临时目录、以及在安装过程的起始窗口出现的文字。
Setup1 Files 段 - 列出应用程序所需的所有其它文件,例如 .exe 文件、数据、以及文本。
Setup 段 - 包含应用程序中的其它文件需要的信息。
Icon Groups 段 - 包含了安装过程将创建的程序组的信息。这部分的每个成员都有一个与之相关的部分,包含了在这个程序组中要创建的图标。
BootStrap 段包含 setup.exe 文件安装和启动应用程序的主安装程序所需的所有信息。
注意 请记住,在安装过程中要用到两个安装程序:一个是 setup.exe,这是一个预安装程序;另一个是 setup1.exe,这是由安装工具包编译生成的。BootStrap 部分将为 setup.exe 文件提供指示。
BootStrap 段包含下述成员:
SetupTitle 当setup.exe 将文件复制到您的系统时所出现的对话框中显示的标题。 SetupText 当setup.exe 将文件复制到您的系统时所出现的对话框中显示的文字。 CabFile 应用程序的 .cab 文件的名称,或者,如果软件包有多个 .cab 文件,则表示第一个 .cab 文件的名称。 Spawn 当 setup.exe 完成处理后要启动的应用程序名称。在大多数实例中,这个名称将是 setup1.exe 文件。 TmpDir 存放在安装过程中产生的临时文件的位置。
Uninstall 用做卸载程序的应用程序名称。一般来说,该程序是 st6unst.exe,这个文件是由向导创建所有的软件包时自动打包加入的。
BootStrap Files 段 - 列出了主安装文件所需的所有文件。通常这部分只包括 Visual Basic 运行时文件。BootStrap Files 段列出了在加载您的应用程序和从属文件之前,必须加载入用户机器的所有文件。这些预安装的、或称为引导文件,包括运行任何 Visual Basic 应用程序所必需的核心文件,例如 Visual Basic 运行时 DLL (Msvbvm60.dll)。安装程序在安装和启动主安装程序之前将安装这些文件。
Setup1 Files 段包含了您的应用程序所必需的所有其它文件,例如 .exe ?募?⑹?荨⑽谋疽约按邮粑募?取0沧俺绦蚪?诎沧傲? Bootstrap Files 段所列出的核心文件之后安装这些文件。
Setup 段:Setup.lst 文件的 Setup 段是一个简单的列表,它列出了安装过程的其它部分所使用的信息。下表列出了 Setup 段所包含的信息。Title 将出现在安装期间的快速显示屏幕、“启动”菜单的程序组、以及程序项名称上的应用程序名称。 DefaultDir 缺省的安装目录。用户可以在安装过程中指定一个不同的目录。 ForceUseDefDir 如果为空,则会提示用户输入一个安装目录。如果设为 1,则应用程序将自动安装到 Setup.lst 的 "DefaultDir"所指定的目录中。 AppToUninstal 应用程序在“控制面板”中的“添加/删除程序”实用程序中出现的名称。AppExe 应用程序的可执行文件的名称,例如 Myapp.exe。
IconGroups 段包含了关于安装过程所创建的“启动”菜单的程序组的信息。每个要创建的程序组首先在 IconGroups 部分列出,然后指定一个单独部分(Group0, Group1, Group2, 等),在此部分中包含关于这个程序组的图标和标题的信息。程序组从 0 开始顺序编号。
1. 创建“启动”菜单的程序组
按照向导,选择“下一步”来到“启动菜单项”。先选中“programs”-“新建组”-输入“启动”-“新建项”-“输入您想加入启动项中的名称如“启动应用程序”,按“下一步”直至“完成”。
如图所示
打开生成的Step.lst文件,注意IconGroups 段中的条目及其相关的子段:
[IconGroups]
Group0=工程1
PrivateGroup0=True
Parent0=$(Programs)
Group1=启动
PrivateGroup1=False
Parent1=$(Programs)
[工程1]
Icon1="设置墙纸.EXE"
Title1=工程1
StartIn1=$(AppPath)
[启动]
Icon1="设置墙纸.exe"
Title1=设置启动程序
StartIn1=$(AppPath)
[Setup]
Title=工程1
DefaultDir=$(ProgramFiles)\工程1
AppExe=设置墙纸.EXE
AppToUninstall=设置墙纸.EXE
当您运行向导所创建的安装程序时,在“选择程序组”中会出现如图所示,您就可以把程序放在“启动程序组”中了。
如图所示
2. 提供一个联机帮助安装选项
除了使用安装工具包工程来创建您的自定义安装工程外,还可以将安装工具包工程与打包和展开向导一起使用。在这种情况下,您可以使用安装工具包工程来自定义安装过程的屏幕或其它部分,然后使用向导来创建和部署应用程序的软件包。例如,您可以提供一个联机帮助,而用户也可以不安装。可以按照您的需要添加任意的安装选项。您还可以将安装工具包与打包和展开向导一起使用,以便为安装工程添加对话框,提示用户指定是否安装应用程序的可选功能。
在 Setup1.vbp 工程中,编辑 setup1.frm 窗体中的 Form_Load 事件的代码。在调用 ShowBeginForm 函数 (Sub ShowBeginForm) 的代码块之后添加如下代码。
下面的示例显示了如何添加一个对话框,来询问用户是否要安装可选文件:
Dim LoadHelp As Integer
LoadHelp = MsgBox ("Do you want to install Help? ", vbYesNo)
If LoadHelp = vbYes Then
CalcDiskSpace "Help"
EndIf
注释: 包含 cIcons = CountIcons(strINI FILES) 的代码块
If LoadHelp = vbYes Then
cIcons = CountIcons("Help")
EndIf
注释: 包含 CopySection strINI_FILES 的代码块。
If LoadHelp = vbYes Then
CopySection "Help"
EndIf
注释: 包含 CreateIcons, strINI FILES, strGroupName 的代码块
关闭 Setup1.frm,保存该窗体以及安装工具包工程,并编译创建 Setup1.exe 文件。
运行打包和展开向导,并从主屏幕中选择“打包”。根据向导的各个屏幕进行适当的选择。对上面的示例,您可以在“添加和删除”屏幕中列出的“自定义”对话框中确认用户可以选择安装的所有可选文件。在完成打包和展开向导的所有操作后,将生成发布媒体。
对 Setup.lst 文件进行必要的更改。在上面的示例中,您可以在代码的 CopySection 部分所使用的部分中添加一个新的部分。在这种情况下,这个部分可能会象下面这样:
[Help]
File1=MyApp.HL1,MyApp.HLP,$(AppPath),,,10/12/96,2946967,0.0.0
部署并测试您的软件包。
当用户运行本过程所示示例的安装程序时,安装程序将所有的 BootStrap 文??粗频接没Щ?鳎?缓筇崾居没е该魇欠癜沧鞍镏?募?H绻?没а≡瘛笆恰保?? CalcDiskSpace 语句将确定在是否用户机器上是否有足够的磁盘空间来存放帮助文件。然后该程序安装 Setup.lst 中的 Setup1 Files 部分列出的所有文件。.接下来,程序将再测试一次 LoadHelp 标记。如果用户选择安装帮助文件,Setup1.exe 就开始为帮助文件执行 CopySection 语句,然后安装 Setup.lst 的 [Help] 部分所列的文件。
二、 Internet 软件包部分
Internet 软件包是基于 .cab 的安装程序、它是专为从 Web 站点下载而设计的。Internet Explorer 使用一个称为“Internet 部件下载”的过程来安装 Internet 应用程序。打包和展开向导自动包括其所创建的软件包所需的信息。您可以使用 Visual Basic 的打包和展开向导快速轻松地将您的 ActiveX 部件打包以供Internet 下载。打包和展开向导把部件打包成一个浏览器能识别的文件,并创建一个 Web 页面,用户可以从其中下载。然后您就可以将打包的结果部署到用户能存取的 Web 页面上了。
向导将部件及其所关联的文件打包到一个压缩的 (.cab) 文件中,供浏览器下载部件时使用。向导确定运行工程需要哪些文件,然后收集这些文件,将它们压缩为一个.cab 文件,并生成指向您的部件的 HTML;向导将打好包的文件部署到您选择的 Web 服务器位置上。
可以被打包供 Internet 部署的主要类型包括:在 Web 页上显示的 ActiveX 控件(.ocx 文件)、用于在客户或 Web 服务器上运行的 ActiveX .exe 或 .dll 文件、代替 Web 页显示的 ActiveX 文档、DHTML 应用程序,基于客户的、通过使用动态的 HTML 来链接 HTML 页与 Visual Basic 代码的应用程序、IIS 应用程序、基于服务器的、链接 HTML 页与 webclass 对象的应用程序Internet 软件包的部分。
Internet 软件包包括的主要文件有: 应用程序的主要 .cab 文件、所有必需的支持文件、应用程序的任何辅助 .cab 文件。主要 .cab 文件包括工程部件,例如应用程序的可执行文件或 DLL、或控件的 .ocx 文件、一个引用辅助 .cab 文件以及包含安全性和注册表信息的 .inf 文件,以及不属于辅助 .cab 文件的所有必需的从属文件;支持文件包括 HTML 文件、Active Server Pages (.asp) 文件、各种格式的图形文件或应用程序运行时必需访问的其它文件;辅助 .cab 文件提供了一个有效的途径,可以确保用户使用的是该部件的最新版本。如果辅助 .cab 文件中部件的较新版本已经可以从外部 Web 站点上获得,则下载您应用程序的用户将自动收到该部件的更新版本。
注意:如果不能或不愿意让应用程序的安装程序需要与 Internet 的连接,则可以将辅助 .cab 文件放置在您的 intranet 的服务器上。intranet 服务器通常提供了更快地下载,并允许用户从安全的网络下载。
在为供下载的 Internet 应用程序或部件打包之后,您就可以将其部署到 Web 服务器上的一个特定位置上了,用户可以从该位置访问这些应用程序或部件。通常,您的软件包被作为一个现存 Web 页面的一部分来引用,也就是说,您的控件或其它部件宿驻在一个 Web 页面上。当用户访问宿驻您软件包的 Web 页面时,系统将该软件包下载到用户的计算机上。该软件包在确认安全性、打开、注册、安装之后被激活。所有这些都发生在后台,并由浏览器控制。
在准备好供下载的 Internet 应用程序和部件后,必须将它们打包为一个可通过浏览器发布给用户的文件。此外,还必须执行一些安全性设置,以确保您的应用程序不会损害用户的计算机。这些步骤包括: 对部件进行数字署名,以便用户能验证部件的内容,并知道您是该软件的开发者;设置安全性级别来保证您的部件不会损害用户的计算机或毁坏其数据;为任何需要许可证的部件安排许可。当添加一个 ActiveX 控件到 Web 页面时,可以将其发布给从该页面下载该控件的任何用户。除非对该控件进行了许可,否则很难防止最终用户取走您的控件并在他们自己的应用程序中使用。许可证可以作为控件的一种版权,来防止未经授权的使用。
打包和展开向导在为 Internet 部件下载打包代码时创建两种类型的文件:发布文件和支持文件。发布文件放在启动向导时指定的目录中,该目录一般包含 .cab 文件和任何与之相关联的.htm 文件。注意:如果生成 .cab 文件后对工程进行了修改,例如修改文件列表,以使其包括在下载中或对部件进行数字签名,则需要重新生成 .cab 文件。向导为支持文件创建一个目录并把 .cab 的输入文件(.inf)放入该目录。此外,支持文件目录还包括 Diamond Directives (.ddf) 文件及其他下载需要的文件。
以下列出了向导创建的所有文件类型:
.cab文件是Windows 安装文件或包含.ocx 文件、.inf 文件和其他从属文件的“压缩包”文件。可以对它进行数字签名以防篡改。
.htm 文件是用于显示 Web 页面的 HTML 文件,该文件包含指向 .cab 文件的链接并用于启动下载过程。
.ddf 文件是Diamond Directives 文件,这是用于创建.cab 文件的工程文件。
.inf 文件是代码下载信息文件,该文件包含有关如何安装控件的信息,并允许自定义安装。
.ocx 文件是ActiveX 控件,可以对它进行数字签名以防篡改。
.dll 文件是ActiveX 文档或代码部件。
如下为向导自动创建的.htm 文件。
〈HTML〉
〈HEAD〉
〈TITLE〉记账单.CAB〈/TITLE〉
〈/HEAD〉
〈BODY〉
〈!--如果这页上的任何控件需要授权,您必须创建一个授权包文件。 运行 LPK_TOOL.EXE 来创建要求的 LPK 文件。 LPK_TOOL.EXE 将从 ActiveX SDK 中找到,http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 Visual Basic 6.0 CD, 您可以在\Tools\LPK_TOOL 目录下
下面是对象标记的例子:
〈OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331"〉
〈PARAM NAME="LPKPath" VALUE="LPKfilename.LPK"〉
〈/OBJECT〉
--〉
〈OBJECT ID="UserControl1"
CLASSID="CLSID:5D970D42-D857-11D2-A0A1-0080C8E2D955"
CODEBASE="记账单.CAB#version=1,1,0,91"〉
〈/OBJECT〉
〈/BODY〉
〈/HTML〉
示例中的第二个 OBJECT 标记包含了一个类标识符为 5D970D42-D857-11D2-A0A1-0080C8E2D955,版本号为1,0,0,1。您所创建的每个 ActiveX 控件都有一个不同的类标识符。此类标识符用于创建 HTML 页面上控件的实例,与将控件放置到 Visual Basic 窗体的过程类似。Internet Explorer 使用类标识符检查注册表来判断控件是否存在。当不存在或现有控件的版本比 CODEBASE 属性中指定的旧,Internet Explorer 将下载并安装指定的文件。
OBJECT 标记的重要部分包括:
CLASSID 类标识符,包含部件的类标识符。
ID 部件的名字,用于脚本中,与 Visual Basic 窗体中控件的 Name 属性相同。
CODEBASE 所需控件的最低版本号和安装位置。
由于Internet 软件包中问题比较多,向导中创建的文件往往不能正常工作,下面就常见的几个问题分析其原因及解决方法。
1、 程序不下载
问题表象:
在一个intranet网建立内部查询网页,服务器操作系统为Windows NT 4.0,在客户机上用VB 6.0的中文企业版生成一个ActiveX用户控件(*.OCX),文件存于服务器,在此客户机上通过IE 4.0浏览完全可运行此程序,然而在另一客户机上则无法运行此控件,用IE 4浏览时,屏幕上一个进度条窗口很快一闪而过,然后浏览器窗口什么也不显示。
问题解决:
问题出在打包程序生成HTML文件上。用记事本打来html文件可以发现,该文件使用FRAME调用html文件,这是不正确的。
在本地用IE打开html文件时,IE把SRC所指的文件按文件方式读入,IE可以识别html文件文件的结构并正确运行。可是从网上下载html文件时,IE通过Server接收html文件的数据。而在正常情况下,FRAME语句中的SRC所指应为一个HTML文档。这里,ActiveX 用户控件是利用〈FRAME SRC="..."〉调用的,这在本机浏览时不会遇到问题。但Internet Explorer在从服务器调用HTML时,它认为凡是出现在〈FRAME SRC="..."〉中的都应该是HTML文档,如果无法识别该文件,就下载并保存该文件。屏幕上一个进度条窗口很快一闪而过就是IE在下载文件。若要解决这个问题,不要使用〈FRAME SRC="..."〉,而改用〈A〉〈/A〉链接方式,一般就不会有问题了。
所以你只要修改html文件,用如下的方法调用就可以解决问题:
〈ahref=http://YourIpAddress.com/firstdoc.vbd〉test〈/a〉
把YourIpAddress.com改为你的地址并把html文件放入正确的目录中。
例如我们需要由Left.htm调用同一目录下的“记账单.htm”,可以使用如下方法。Left.htm内容如下:
〈head〉
〈link REL="STYLESHEET" TYPE="text/css" href="../TocSimple.css"〉
〈base target="right"〉
〈title〉费用管理菜单〈/title〉
〈/head〉
〈body topmargin="0" leftmargin="0" bgcolor="#8a7a5a"〉〈font color="beige" face style="BACKGROUND-COLOR: #dcc8aa"〉〈/font〉
〈table border="0" width="100%" cellspacing="0" cellpadding="5" height="100%"〉
〈tr〉
〈td width="100%" height="32" bgcolor="#dcc8aa"〉〈p align="center"〉
〈font color="beige"〉费用管理〈/font〉〈/p〉
〈/td〉
〈tr〉
〈td height="18" width="100%"〉
〈p align="center"〉〈font color="#ffffff"〉 〈a href="http://server/gfylbeta/money/Program/记账单.htm"〉医院记帐单〈/a〉〈/font〉〈/p〉
〈tr〉
〈/table〉
〈/body〉
〈/html〉
现在用IE打开记账单.htm并点击“医院记帐单”,记账单.htm就可以正确运行了。
〈/SCRIPT〉
2、 程序下载后却不运行
问题表象:
用Vb生成一个简单的ActiveX用户控件(*.OCX),并设定编译时版本自动加1,按照微软的提示编译成OCX文件,再用打包程序生成Internet下载程序,在本机上用IE 4.0浏览正常其他机器用IE 4浏览时却不运行,查看C:\WINDOWS\Downloaded Program Files及C:\WINDOWS\Temporary Internet Files目录从版本号可知下载程序已下载。
问题解决:
原因是ActiveX控件没有被正确安装在客户机上,还有一些所需要的文件并没有下载到客户机,此问题与Vb运行所需要的连接库有关。
你当然可以手工在客户机上安装这个控件,或者每一台机器上都安装一次Vb,但那样太麻烦并且很难保证版本一致性。我们还是借助向导来完成这一工作。
在向导选择“下一步”继续下去,直至“包含文件”项中。
由于您生成的ActiveX用户控件(*.OCX)中使用了别的一些控件,那么在下载时会自动寻找相关的一些文件,如果找不到,则程序不会下载。所以,我们需要把相关的一些文件手工地添加进去。
如图所示
由于该ActiveX用户控件(*.OCX)还引用了一些其他的相关一些文件(常见的有DLL、OCX、TLB等),如DATLSCHS.DLL、DBRPRCHS.DLL、FlashControls_Hefawu.ocx、MSADO20.TLB等。我们也需要为这些文件生成一个CAB文件,当该ActiveX用户控件(*.OCX)用到时会自动查找并下载。
在“包含文件”项中把您用到的相关文件选中,然后选择“下一步”,来到“文件源”中,将您所用到的一些相关文件在指定的目录中生成CAB文件。
重要提示:发布的DLL、OCX、TLB等文件要与生成的CAB文件同名!并且每一个相关的文件都要生成自己的CAB文件。
例如,选中FlashControls_Hefawu.ocx并选择“从其他web站点下载”项,然后输入您指定的目录位置 http://server/vb6/及生成的CAB文件,文件名为FlashControls_Hefawu.CAB。相应地,DATLSCHS.DLL对应为http://server/vb6/DATLSCHS.CAB;DBRPRCHS.DLL对应为http://server/vb6/DBRPRCHS.CAB,另外有些特别的如MSADO15.DLL对应为http://server/vb6/MSADO15.CAB ;VB6 Runtime AND OLE Automation对应为http://server/vb6/Vb6RUN.CAB 。当然,您自己要生成的ActiveX用户控件(*.OCX)要选择“包含在此压缩文件中”选项。
如图所示
最后,向导会建立两个文件:*.cab和*.htm,并且在http://server/vb6/目录中生成许多压缩包。*.cab文件包括了你的ActiveX控件,应该把它放在服务器上。*.htm其核心是修改Object标签的Codebase属性。这样用户机的IE 4.0在浏览时如果没有在客户机找到你的控件,就会利用Codebase属性从服务器上下载*.cab文件,并自动解包、安装并注册ActiveX控件。
打包和展开向导能够帮助您为自己的 Visual Basic 应用程序创建和发布专业的安装程序。除了为应用程序创建 .cab 文件之外,该向导还通过编译随 Visual Basic 一起安装的安装工具包工程来为应用程序创建安装程序。使您的程序在不同的计算机环境下都能“安居乐业”,的确是程序员的好帮手。
上述程序在中文Windows 98和 VB6.0中文企业版下调试通过。