新闻  |   论坛  |   博客  |   在线研讨会
网页上的插件.cab是怎么开发的
jinren1010 | 2008-03-18 15:20:13    阅读:15455   发布文章

首先要理解cab文件,其实是一个压缩的文件,其中包含了许多文件和一个inf文件,inf文件定义解压后其中文件的安装过程
我转贴一篇:

Internet 软件分发单位是“软件包”,它由包含 .inf 文件或软件分发 (.osd) 文件(或两者都包括)
的 CAB 文件 (.cab) 所组成。一个分发单位也可以包含软件组件,如 ActiveX 控件 (.ocx)、.dll
文件、.exe 文件、Java 类文件或小程序。当 Web 页上 OBJECT 元素的 CODEBASE 特性引用包含
?.inf 文件的 CAB 文件时,Internet Explorer 3.0 和更新的版本将自动把 CAB 文件作为软件分发单位。


第一步:创建一个inf文件:
?INF文件是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如DLL或者其它OCX)。
一个INF文件就捆绑了CAB压缩文件所有的必须文件。 缺省情况下,
与现有硬盘中文件版本号相同的文件不被下载。
要了解有关INF文件及其选项(包括如何创建独立于平台的INF文件)的详细情况,
请参考平台软件开发工具包(Platform SDK,)的设置和系统管理服务(Setup and System Management Services)
部分的\Setup API\Overview\INF Files目录下的内容。
下面就以我自己写的一个videoweb.dll为例子。在videoweb.dll中使用到:tdiio.dll,encoder.dll,decoder.dll,tdiio.ini,user.ini,
camer.ini,drivo.ini.
video.inf的例子:
;inf file for videoweb.dll
[version]
;version signature(same fot both NT and Win95) do not remove
signature="$SCHICAGO$"
AdvancedINF=2.0

[Add.Code]
VideoWeb.dll=VideoWeb.dll
tdiio.dll=tdiio.dll
Decoder.dll=Decoder.dll
encoder.dll=encoder.dll
camer.ini=camer.ini
drvio.ini=drvio.ini
castel.ini=castel.ini
user.ini=user.ini
tdiio.ini=tdiio.ini

;needed DLL
[tdiio.dll]
file-win32-x86=thiscab
FileVersion=2,1,701,1
DestDir=11
RegisterServer=yes

[Decoder.dll]
file-win32-x86=thiscab
FileVersion=
DestDir=11
RegisterServer=yes

[encoder.dll]
file-win32-x86=thiscab
DestDir=11
RegisterServer=yes

;needed ini
[camer.ini]
file-win32-x86=thiscab
DestDir=10

[tdiio.ini]
file-win32-x86=thiscab
DestDir=10

[user.ini]
file-win32-x86=thiscab
DestDir=10


[drvio.ini]
file-win32-x86=thiscab
DestDir=10

[castel.ini]
file-win32-x86=thiscab
DestDir=10
;ActiveX dll
[VideoWeb.dll]
file-win32-x86=thiscab
clsid={4BDA0AA3-2164-44B7-8A88-208A145F51DC}
FileVersion=2, 0, 0, 1
DestDir=11
RegisterServer=yes

;end of INF file

下面解说一下上面的一些关键的东西:
关键字"file-win32-x86" 指定平台是 x86。
file-win32-x86也可以指向一个url上的dll。比如:file-win32-x86=http://www.castelsz.com/xxx/xxx.dll
FileVersion:版本号(点右键看属性就可以得到,也可以没有)
DestDir:指的是装载目录或者文件的地址: 11 指定为系统目录 WINDOWS/SYSTEM 或者 WINNT/SYSTEM32;
?????? 10 规定为窗口目录、WINDOWS或者WINNT。如果没有指定DestDir(典型情况),则代码从固定的OCCACHE目录装载。
clsid:指的是要安装控件的CLSID
RegisterServer:表示是否需要注册。
当然以上仅仅是在internet上分发软件时一个很简单的inf文件,还有更复杂的inf文件。请看SDK。

第二步:把video.inf, tdiio.dll,encoder.dll,decoder.dll,tdiio.ini,user.ini,
camer.ini,drivo.ini.放在一个文件夹中。
第三步:开始制作cab文件,我是用IExpress工具制作的(可以到wwww.newhua.com去下载pIExpres2工具),其实改工具就是使用了:cabarc这个VC5.0中带一个工具。
???? 1:选择创建新的自解压指令文件。
???? 2:选择仅创建压缩文件(ActiveX安装)
???? 3:点击添加把你要供别人下载的文件添加
???? 4:点击浏览 输入*.cab文件的存放地址(包含文件名)
???? 5:就随便了
好了制作完成。
现在在你的网页中使用该控件,当别人访问你的网页时,如果他的机子上没有你的控件,浏览器就会自动下载安装。因为你的控件可能没有获得签名
因此得在你的浏览器中把浏览器的安全级别降低。在internet 工具中选择安全,选择自定义。找到下载未签名的ActiveX控件。选择其下面的提示或者启用。
在网页中插入:

<OBJECT classid=clsid:4BDA0AA3-2164-44B7-8A88-208A145F51DC
codebase="video.cab#version=2,0,0,1"
data=data:application/x-oleobject;base64,owraS2Qht0SKiCCKFF9R3AADAAA1SgAAZzQAAA==
id=Video1 style="HEIGHT: 507px; WIDTH: 718px"></OBJECT>
codebase="video.cab#version=2,0,0,1"
data=data:application/x-oleobject;base64,owraS2Qht0SKiCCKFF9R3AADAAA1SgAAZzQAAA==
id=Video1 style="HEIGHT: 507px; WIDTH: 718px">
该句.
注意:得把*.cab 文件你和的网页放在同一目录下。或者在codebase中指定*.cab的路径。

文章引用自:

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客