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] 
signature=$CHICAGO$

[DestinationDirs] 
DLLSysCopy=11 
IniWinCopy=25

[DefaultInstall] 
CopyFiles=DllSysCopy,IniWinCopy 
AddReg=videoReg

[DllSysCopy] 
tdiio.dll 
Decoder.dll 
VideoWeb.dll

[IniWinCopy] 
camer.ini 
user.ini 
xvidMP4.ini

[videoReg] 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC},"",%REG_SZ%,"Video Class" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\Control 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\Implemented Categories 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4} 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4} 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\InprocServer32,"", %REG_SZ%,"%11%\VideoWeb.dll" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\InprocServer32,"ThreadingModel",%REG-SZ%,"Apartment" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\MiscStatus,"",%REG_SZ%,"0" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\MiscStatus\1,"",%REG_SZ%,"131473" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\ProgID,"",%REG_SZ%,"VideoWeb.1.1" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\Programmable 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\ToolboxBitmap32,"",%REG_SZ%,"%11%\VideoWeb.dll,102" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\TypeLib,"",%REG_SZ%,"{FC4352CB-BB55-498C-BB21-E4BAE2FC2584}" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\Version,"",%REG_SZ%,"1.0" 
HKCR,CLSID\{4BDA0AA3-2164-44B7-8A88-208A145F51DC}\VersionIndependentProgID,"",%REG_SZ%,"VideoWeb.1" 
;end of INF file

DestinationDirs:指的是装载目录或者文件的地址: 11 指定为系统目录 WINDOWS/SYSTEM 或者 WINNT/SYSTEM32; 
10 规定为窗口目录、WINDOWS或者WINNT。 
videoReg:如果是自己写的控件:可以在本地先用regsvr32 xxx.dll注册后,从注册表中找到上面的注册信息。 
当然以上仅仅是在internet上分发软件时一个很简单的inf文件,还有更复杂的inf文件。请看SDK。

第二步:把video.inf, tdiio.dll,encoder.dll,decoder.dll,tdiio.ini,user.ini, 
camer.ini,drivo.ini.放在一个文件夹中。 
第三步:开始制作cab文件,我是用IExpress工具制作的(该工具在winnt\system32目录下面)。 
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" 
id=Video1 style="HEIGHT: 507px; WIDTH: 718px"></OBJECT> 
该句. 
注意:得把*.cab 文件你和的网页放在同一目录下。或者在codebase中指定*.cab的路径。

VB的CAB包很简单,直接打包就可以了  
  Delphi不知道有没有这样的工具  
  VS.Net   2003   肯定有的  
  ============================下面是给OCX/DLL/CAB文件添加数字签名的方法======  
  首先要有工具包,包括以下几个软件:  
  makecert.exe     制作cer格式的证书,即X.509证书,同时可以创建私钥  
  cert2spc.exe     将cer格式证书转换成spc格式证书,即PKCS   #7证书  
  signcode.exe     将证书签署到ocx上去  
  chktrust.exe     检查签署证书后的ocx是否正确  
  还有一个certmgr.exe,是管理证书用的。可以从这里面导出root.cer来,  
  网上很多文章写到这个证书,但是在VC的安装盘中却找不到。其实,没  
  有也没关系的。这几个软件可以从VC的安装盘中找到。  
   
  下面是具体的步骤:  
  1、创建一个自己的证书文件:  
  makecert   /sv   "Record.PVK"   /n   "CN=公司名称,E=email,O=作者"   dream.cer  
  这里,Record.PVK表示新创建的私人密钥保存文件名  
              DreamCaptial是你想显示的公司名  
              dream.cer是你创建最后的证书文件名  
  这些根据你自己的要求填写,最后得到Record.PVK和dream.cer两个文件。  
  其中,运行过程中需要输入私人密钥的保护密码,一定要输入一致,不要  
  出错。  
   
  2、转换cer格式为spc格式(可以省略)  
  cert2spc   dream.cer   dream.spc  
  得到dream.spc文件。  
   
  3、给ocx进行签名  
  运行signcode,命令行的我没有试验通过,我是通过界面实现的。  
  signcode运行后会出现数字签名向导,首先选择你要签名的ocx,  
  下一步后会出现签名选项,一种是典型,一种是自定义。选择自定义,  
  这样才能从文件选择证书,选择前面制作的dream.spc,再下一步是  
  选择私钥文件,选择Record.PVK,输入私人密钥的保护密码,选择散  
  列算法,一般用md5就可以了,下一步是选择其他证书,直接下一步,  
  填写一下这个控件的声明,用户用ie浏览的时候,会弹出证书说明,  
  再下一步是加盖时间戳,我不会,直接下一步就完成了。  
   
  4、用chktrust检查是否正确  
  chktrust   -v   RecordProj.ocx  
   
  就这样,得到了一个测试证书,恩,虽然只是一个测试证书,但至  
  少保证这个ocx在ie浏览的时候能够弹出来一个窗口,问你是否安装,  
  而不是直接禁止了。

inf   的这样写:  
   
  -------inf   开始  
  [Version]  
  Signature="$CHICAGO$"  
  AdvancedInf=2.0  
   
  [Add.Code]  
  A.dll=A.dll  
   
  [A.dll]  
  file-win32-x86=thiscab  
  CLSID={F9043C88-F6F2-123A-A123-08002B2F49FB}  
  FileVersion=6,1,97,82  
  RegisterServer=Yes  
   
  --------inf   结束  
   
  注意:  
  (1)收集控件引用的所有DLL,包括控件引用的DLL又引用的其它DLL。将所有DLL的名称写入INF文件的[Add.Code]部分,最先注册的DLL,放在最上面,按顺序加入所有文件名称。  
  (2)按照[Add.Code]的文件名称顺序加入每DLL的[DLL名称]部分.  
  (3)clsID   的获取:从注册表的   HKEY_CLASSES_ROOT\CLSID\   中查找,查询时,只输入文件名(不要后缀)  
  (4)FileVersion的获取:选择文件,单击右键,[属性]-[版本],将文件版本中的“.”换成“,”。  
  (5)需要注册的DLL:RegisterServer=yes   ,不需要注册的DLL:RegisterServer=No  
  (6)不要使用这一行:DestDir=11  
      “DestDir”是将要加载文件的目录所在的位置:11   指定系统目录为   WINDOWS/SYSTEM   或   WINNT/SYSTEM32;10   指定   Windows   目录、WINDOWS   或   WINNT。如果未指定任何   DestDir(典型情况),则代码安装在固定的   OCCACHE   目录中。  
   
  这是我研究了很长时间,得出的结果。

CAB包制作总结(explorer.exe打包)

1.       步骤:INF文件编写->打包->传到相应目录下

2.       INF编写:

[Version]

signature="$Harbour$" //其中Harbour为自己定义的名称

AdancedINF=2.0

[Add.Code] //所要加载的所有文件

LhardvsSdk.ocx=LhardvsSdk.ocx

FFSHOWcodec.ax=FFSHOWcodec.ax

avutil-49.dll=avutil-49.dll

HarbourSdk.dll=HarbourSdk.dll

avcodec-51.dll=avcodec-51.dll

avformat-51.dll=avformat-51.dll

[LhardvsSdk.ocx]//注意:一定要把控件信息写在动态库信息之前

file-win32-x86=thiscab

clsid={A7428F10-8C34-4FA8-A5A9-C55CDEBE4A25}

FileVersion=1,0,0,1

RegisterServer=yes //一定为YES

DestDir=11

[FFSHOWcodec.ax]

file-win32-x86=thiscab

FileVersion=1,0,0,1

RegisterServer=yes

DestDir=11

[avutil-49.dll]

file-win32-x86=thiscab

FileVersion=1,0,0,1

RegisterServer=no//如果是辅助的动态库,则不需要注册到服务器

DestDir=11

[HarbourSdk.dll]

file-win32-x86=thiscab

FileVersion=1,0,0,1

RegisterServer=no

DestDir=11

[avcodec-51.dll]

file-win32-x86=thiscab

FileVersion=1,0,0,1

RegisterServer=yes

DestDir=11

[avformat-51.dll]

file-win32-x86=thiscab

FileVersion=1,0,0,1

RegisterServer=no

DestDir=11

//INF END

3.打包,在运行中输入:iexpress.exe

选择creat new self extraction directive file 点击下一步

选择creat compressed files only (activex installs) 点击下一步

加载包括INF在内的所有文件 点击下一步

选择路径后点击store files using long file name inside package 点击下一步

选择don’t save点击下一步

此时在你指定的路径下已经有您要打的CAB包存在了

4.只需将您打好的CAB包放在您的WEB目录下

5.在WEB页面中加CODEBASE属性,CAB包就可以自动下载安装了.

转载于:https://www.cnblogs.com/penglink/archive/2009/03/25/1421695.html

【转】从网页上下载控件时制作CAB包的方法相关推荐

  1. C#开发ActiveX控件及制作CAB包

    一个项目要用到 ActiveX 控件,参照网上众多的例子,ActiveX控件倒是很容易就搞出来了: 然后做了一个[ 安装项目],倒是可以使用,只不过需要在客户端手动点击安装,下一步,下一步-觉得不是很 ...

  2. C#BS通过ActiveX控件及制作CAB包来调CS

    1) 创建Visual Studio解决方案 "ActiveXSolution". 2)在解决方案ActiveXSolution中添加 Windows窗体应用程序 "CS ...

  3. [转]ActiveX控件去除IE警告框的方法

    1.介绍 如果你曾经在网页或者ASP中使用过com对象,你可能会发现,有时候会出现这样讨厌的对话框     这是因为你的控件没有被标记为安全的,对于初始化不安全或者对于脚本不安全,甚至兼而有之.你每打 ...

  4. 使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容

    第一次在CNBlogs上发Post是提出一个有关使用WebBrowser控件时对SELECT网页元素操作的疑惑,这个问题至今也没有解决,后来有朋友在该Post的评论里询问WebBrowser控件如何在 ...

  5. 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件

    引言 这两天沉迷了Google SketchUp,刚刚玩够,一时兴起,研究了一下WebBrowser. 我在<WebBrowser控件使用技巧分享>一文中曾谈到过"我现在可以通过 ...

  6. C# 多线程修改控件时遇到:创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke

    一般在多线程调用UI控件时,涉及到跨线程修改UI,需要使用委托,比如如下: this.Invoke((MethodInvoker)delegate{btnRefresh.Enabled = true; ...

  7. ActiveX控件打包成Cab实现浏览器自动下载安装

    前言 我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 ...

  8. jquery文件上传控件 Uploadify

    基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个 ...

  9. 怎么在ASP.NET中写HTML,如何:在 ASP.NET 网页中设置控件的 HTML 属性

    如何:在 ASP.NET 网页中设置控件的 HTML 属性 10/22/2014 本文内容 更新:2007 年 11 月 这些示例显示如何向页面中的元素添加 HTML 属性.第一个示例演示如何以声明方 ...

最新文章

  1. python pymysql
  2. iOS开发异常错误总结之——wait_fences: failed to receive reply: 10004003
  3. Linux tar将分割的小文件进行合并
  4. 简练软考知识点整理-控制成本过程
  5. tcp通讯一次最多能发送多少数据?_关于TCP/IP,必须知道的十个知识点
  6. Android的虚拟机Dalvik 介绍
  7. php avc,什么是AVC编码?简述H.264概念和发展
  8. 四边形可以分为几类_大件物流有哪些公司?大件物流公司的业务可以分为哪几类...
  9. java代码调用python导致系统重启_从Java调用Python代码时出现问题(不使用jython)...
  10. xpraid安装_XP系统怎么安装raid驱动|XP系统安装raid驱动的方法
  11. 掌握SQL Monitoring这些特性,SQL优化通通不在话下
  12. .vimrc 错误 E484:打不开syntax.vim E185:Cannot find color scheme
  13. 常用IP地址端口对照表
  14. 人族机器人叉兵_星际争霸:人虫两族都有回血机制,神族:你们都是渣渣
  15. [生存志] 第109节 秦始皇初玩叠人塔
  16. 混沌麻雀搜索优化算法
  17. python 读取pdf cid_记一次为解决Python读取PDF文件的Shell操作
  18. Linux学习手册(命令大全)
  19. 集合的生产力工具类:Collections,我直呼好家伙。。
  20. [Android 分享] 使用xposed来hook使用360加固的应用

热门文章

  1. python编码规范手册-Python官方竟然给出了一种编码规范PEP 8
  2. python中处理日期和时间的标准模块是-Python time模块参考手册
  3. 成都python工作-在成都学习Python能做什么?到底有没有发展前途?
  4. 新手用python2还是3-新手用python2还是3
  5. python2中使用中文报错:SyntaxError: Non-ASCII character
  6. Jetson nano刷好机之后需要做的准备工作
  7. codeforces D. Palindrome Degree(hash)
  8. spring中Validation设计与实现
  9. 一致性hash算法简介
  10. Qt中禁止调节窗口大小