将ocx和DLL文件打包成cab文件,实现IE浏览器在线安装

我们打开淘宝等网站时,IE浏览器会提示安装空间,这个控件便是用于对用户名密码进行加密的ActiveX控件。如何在我们的站点上安装如此控件,让用户可以通过简单的点击便可方便使用我们的空间呢?

 

下面是如何让在你的站点上安装控件的方法。

 

 

 

 

--------------------------------------------------------------------------------

 

 

 基础知识

 

html语言中Object标签

定义和用法

定义一个嵌入的对象。请使用此元素向您的 XHTML 页面添加多媒体。此元素允许您规定插入 HTML 文档中的对象的数据和参数,以及可用来显示和操作数据的代码。<object> 标签用于包含对象,比如图像、音频、视频、Java applets、ActiveX、PDF 以及 Flash。object 的初衷是取代 img 和 applet 元素。不过由于漏洞以及缺乏浏览器支持,这一点并未实现。浏览器的对象支持有赖于对象类型。不幸的是,主流浏览器都使用不同的代码来加载相同的对象类型。而幸运的是,object 对象提供了解决方案。如果未显示 object 元素,就会执行位于 <object> 和 </object> 之间的代码。通过这种方式,我们能够嵌套多个 object 元素(每个对应一个浏览器)。

 

实例

向HTML中添加对象:

 

view plaincopy to clipboardprint?<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1"    width="100" height="50">    <param name="BorderStyle" value="1" />    <param name="MousePointer" value="0" />    <param name="Enabled" value="1" />    <param name="Min" value="0" />    <param name="Max" value="10" />  </object>  <object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1"

width="100" height="50">

  <param name="BorderStyle" value="1" />

  <param name="MousePointer" value="0" />

  <param name="Enabled" value="1" />

  <param name="Min" value="0" />

  <param name="Max" value="10" />

</object> 参考

 

http://www.w3school.com.cn/tags/tag_object.asp

 

Windows中注册类ID:clsid

“通用唯一标识符”(UUID),用于标识 COM 组件。每个 COM 组件在 Windows 注册表中都有自己的 CLSID,以便让其他应用程序加载。

 

ActiveX控件CLSID的获取

在编译完成每一个ActiveX控件之后,系统会生成ocx.html文件,其中是调用该ActiveX控件的方法。该页面中有一个标签即为Object,其中有一行则记录着该ocx文件的CLSID,如下:

 

view plaincopy to clipboardprint?<object   ID="TopoSceneViewer"      WIDTH=800   HEIGHT=600   CLASSID="CLSID:321B84C8-3745-4AC9-BF04-55753F40CE63">    </object>  <object

 ID="TopoSceneViewer" 

 WIDTH=800

 HEIGHT=600

 CLASSID="CLSID:321B84C8-3745-4AC9-BF04-55753F40CE63">

</object>

--------------------------------------------------------------------------------

 

创建cab文件

cab文件中需要包含一系列文件,其中.inf文件会告诉IE如何去安装这些文件。我们从.inf文件开始怎么写inf

INF文件的组成有节(Sections),键(Key)和值(value)三部分。 关键节有 [Version]版本描述信息,主要用于版本控制。    [Strings]字符串信息,用于常量定义。    [DestinationDirs]定义系统路径信息。    [SourceDisksNames]指明源盘信息。    [SourceDisksNames]指明源盘文件名。    [DefaultInstall]开始执行安装。  [Version]版本描述信息,主要用于版本控制。

[Strings]字符串信息,用于常量定义。

[DestinationDirs]定义系统路径信息。

[SourceDisksNames]指明源盘信息。

[SourceDisksNames]指明源盘文件名。

[DefaultInstall]开始执行安装。 其它的节可以自定义

 

最开始一般是[Version]区:

 

[Version]     signature="$XXXX$"     AdvancedINF=2.0   [Version] 

signature="$XXXX$" 

AdvancedINF=2.0  "Signature"项定义了该INF文件需要运行在何种操作系统版本中。有$Windows NT$, $Chicago$, or $Windows 95$三个值供选择,一般选择$Chicago$即可。

 

接下来就是最重要的[Add.Code]区:

 

[Add.Code]     Ctrl1.dll=C1Section     Ctrl2.dll=Ctrl2.dll   [Add.Code] 

Ctrl1.dll=C1Section 

Ctrl2.dll=Ctrl2.dll  前面是要下载的文件名,后面是对应这个文件的区域名,可以是任何名字,不过一般都是和文件的名字相同,这样方便维护。

 

还有需要注意是在[Add.Code]区出现的文件要根据依赖性进行排序,例如前面说的ctrl1.dll要依赖于ctrl2.dll,则ctrl2.dll要出现在ctrl1.dll的前面。因为安装时是按照相反的顺序进行的,也就是说先安装ctrl2.dll,然后才是ctrl1.dll,哧哧,记清楚了,不要搞反了。

 

再接下来是各个文件的区域了

 

[Ctrl1.dll]     file-win32-x86=thiscab     RegisterServer=yes     clsid={.....}     DestDir=       FileVersion=1,0,0,0   [Ctrl1.dll] 

file-win32-x86=thiscab 

RegisterServer=yes 

clsid={.....} 

DestDir=   

FileVersion=1,0,0,0  [Ctrl1.dll]区域中的第一个file值告诉ie到哪里去得到这个dll,file一共包括三个部分,第一部分是file,这个永远都是这样的(至少目前来说);第二部分告诉声明支持的OS,win32表示windows,mac就是苹果MAC OX了;第三部分是CPU类型,比如说x86、 ppc (Power PC)、 mips或者alpha了。

 

file的值可以取三个一个URL、ignore和thiscab,如果是URL则说明到URL所在的位置去下;如果是ignore说明对于这种OS和CPU,不需要下载这个文件(ctrl1.dll);如果是thiscab很明显就在当前的cab文件中了。

 

接下来是RegisterServer,可以取两个值yes和no,如果为yes则说明ie要注册该dll,如果是no就不必了。+如果这里选yes,则需要指定clsid,否则clsid一行可以省略。+

 

再下来是DestDir,它的值是dll将要存到本地硬盘的位置,如果它的值是10,则将dll放到\Windows或者\WinNT下;如果是11,则放到\Windows\System或者\WinNT\System32下;如果是空(就是没有值)则会放到\Windows或者\WinNT下的Downloaded Program Files目录下;

 

最后是FileVersion,这个就比较明显了,说明了ctrl1.dll的版本号。

 

其他部分详见参考文献。

 

创建cab文件

如果需要创建cab文件,首先需要Cabarc或者Makecab,它们随着Cabinet SDK的安装就有了,Cabinet SDK的下载地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp

Cabarc可以创建、查看或者解出cab里面的文件,而Makecab则只可以用来创建cab文件。

制作cab文件时需要将所有的相关文件都包含进去,可以通过Depends(VC自带的)检查需要的文件。使用inf文件将这些东西都写进去。

inf搞法:inf文件描述cab中所有的ocx及dll文件,inf通过一些命名区域来提供需要的信息。

 

cabarc  N  ctrl1.cab  ctrl1.inf  ctrl1.dll   cabarc  N  ctrl1.cab  ctrl1.inf  ctrl1.dll  N表示要创建一个新的文件,ctrl1.cab是创建的文件名,ctrl1.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。

然后就可以将cab文件放到网页上了

参考

如何编写INF:http://www.cnblogs.com/sbdx/archive/2006/12/14/whatisinffile.html

如何写cab相关的INF:http://docs.google.com/Doc?docid=0Aehzv88zbfy_ZGdncGdqczZfMjIxZHNnZDhtYzg&hl=zh_CN

 

--------------------------------------------------------------------------------

 

签名

 

申请证书

要使用到makecert工具,在VS2005目录下搜索可以搜索到。

 

在命令提示行中执行

 

makecert -sk myNewKey -r -n "CN=发证机关的名字,OU=Certification,O=公司名字,E=name@email.com" -ss my myNew.cer   cert2spc myNew.cer myNew.spc  makecert -sk myNewKey -r -n "CN=发证机关的名字,OU=Certification,O=公司名字,E=name@email.com" -ss my myNew.cer

cert2spc myNew.cer myNew.spc makecert具体使用帮助可参考创建证书的工具(makecert.exe)

 

签名

 

要使用到signtool工具,也可以在VS2005目录下找到。

 

signtool工具有多种使用模式,下面使用的是带UI的向导模式。

在命令提示行中执行

 

signtool  signwizard  signtool  signwizard 之后进入signcodewizard:

 

step1.选择要签名的cab文件   step2.自定义   step3.从文件中选择 myNew.spc   step4.csp中的私钥/密钥容器:myNewKey   step5.sha1   step6.next   step7.描述:插件名称/web:www.yourcompany.com   step8.http://timestamp.verisign.com/scripts/timstamp.dll  step1.选择要签名的cab文件

step2.自定义

step3.从文件中选择 myNew.spc

step4.csp中的私钥/密钥容器:myNewKey

step5.sha1

step6.next

step7.描述:插件名称/web:www.yourcompany.com

step8.http://timestamp.verisign.com/scripts/timstamp.dll signtool 的具体使用帮助可参考签名工具 (SignTool.exe)

 

在上一篇文章中,讲述了如何制作客户端Activex插件的cab包,但是在使用过程中发现有的浏览器不能注册成功,手动注册也不行,提示缺少动态链接库的问题,导致不能正常使用。后来重新编译ocx,将其他dll补充进来一起打包,但仍然不能注册成功。

 

    于是将所有文件复制到system32文件夹下,手动进行注册,结果注册失败。原来是inf中的写法将system32作为目的文件夹,而该文件夹却不允 许这样操作。至于原因,目前还不清楚,网上搜索到的例子也都是使用system32,可能我的ocx比较特殊吧,那就使用system32下新建的一个目 录吧,这次手动注册可以成功。

 

    重新打包、测试,有点崩溃了,为什么还是注册不了。现象是浏览器提示是否安装,点击安装后无反应,刷新页面还是提示是否安装。后来查看支付宝的支付控件中的inf文件,按照其格式重新制作inf文件,再次测试,成功!

 

如何制作cab包

制作SSL VPN客户端插件cab包有两种方法,一种是手动打包,另一种是利用Ant自动打包,下面分别对两种方法进行说明,你可以根据熟练程度自由选择。

一、手动打包

准备工作

l  用到的工具

打包工具iexpress.exe

签名工具signcode.exe

代码签名证书

l  打包文件

WVC.ocx

LiteUnzip.dll

mfc80u.dll

mfcm80u.dll

msvcm80.dll

msvcp80.dll

msvcr80.dll

Microsoft.VC80.CRT.manifest

Microsoft.VC80.MFC.manifest

       在制作cab包之前,需要准备以上的打包、签名工具和文件,将iexpress.exe和signcode.exe复制到Java环境变量的bin目录下。打包文件全部存放在独立的一个文件夹下。

制作步骤

步骤1 准备inf文件

将以下代码另存为wvc.inf,存放于打包文件目录下。文件内容一般情况下不需要改变,除非cab需要增加或减少文件的情况下,再修改此文件。

 

 

Text代码   收藏代码
  1. [version]  
  2. signature="$CHICAGO$"  
  3. AdvancedINF=2.0  
  4.   
  5. [DefaultInstall]  
  6. CopyFiles=files  
  7. RegisterOCXs=RegisterFiles  
  8.   
  9. [DefaultUninstall]  
  10. cleanup=1  
  11. Delfiles=files  
  12. UnRegisterOCXs=RegisterFiles  
  13.   
  14. [SourceDisksNames]  
  15. 1 = %DiskName%,"wvc.cab",1  
  16.   
  17. [SourceDisksFiles]  
  18. WVC.ocx=1  
  19. LiteUnzip.dll=1  
  20. mfc80u.dll=1  
  21. mfcm80u.dll=1  
  22. msvcm80.dll=1  
  23. msvcp80.dll=1  
  24. msvcr80.dll=1  
  25. Microsoft.VC80.CRT.manifest=1  
  26. Microsoft.VC80.MFC.manifest=1  
  27. westone.cer=1  
  28.   
  29. [RegisterFiles]  
  30. %11%\sslvpn\WVC.ocx  
  31.   
  32. [DestinationDirs]  
  33. files=11, sslvpn  
  34.   
  35. [files]  
  36. WVC.ocx=WVC.ocx  
  37. LiteUnzip.dll=LiteUnzip.dll  
  38. mfc80u.dll=mfc80u.dll  
  39. mfcm80u.dll=mfcm80u.dll  
  40. msvcm80.dll=msvcm80.dll  
  41. msvcp80.dll=msvcp80.dll  
  42. msvcr80.dll=msvcr80.dll  
  43. Microsoft.VC80.CRT.manifest  
  44. Microsoft.VC80.MFC.manifest  
  45. westone.cer=westone.cer  
  46.      
  47. [WVC.ocx]  
  48. file-win32-x86=thiscab  
  49. clsid={C8E6EFFA-ED02-4858-836A-B164102F3C5D}  
  50. RegisterServer=yes  
  51. FileVersion=1,0,0,1  
  52.      
  53. [LiteUnzip.dll]  
  54. file-win32-x86=thiscab  
  55. FileVersion=0,0,0,2  
  56.   
  57. [mfc80u.dll]  
  58. file-win32-x86=thiscab  
  59. FileVersion=8,0,50727,42  
  60.   
  61. [mfcm80u.dll]  
  62. file-win32-x86=thiscab  
  63. FileVersion=8,0,50727,42  
  64.   
  65. [msvcm80.dll]  
  66. file-win32-x86=thiscab  
  67. FileVersion=8,0,50727,42  
  68.   
  69. [msvcp80.dll]  
  70. file-win32-x86=thiscab  
  71. FileVersion=8,0,50727,42  
  72.   
  73. [msvcr80.dll]  
  74. file-win32-x86=thiscab  
  75. FileVersion=8,0,50727,42  
  76.   
  77. [westone.cer]  
  78. file-win32-x86=thiscab  
  79.   
  80. [Strings]  
  81. DiskName = "sslvpn"  

 

 

注释:

?  "thiscab" 是一个关键字,意指包含该INF的CAB文件。也可以从网上下载所需要的DLL文件,只要指定一个HTTP 网址即可,如:

?  关键字"file-win32-x86" 指定平台是 x86。

?  文件版本号可见属性。

?  "DestDir"指的是装载目录或者文件的地址: 11 指定为系统目录 WINDOWS/ /SYSTEM32;

?  "clsid" 指的是要安装控件的CLSID。

步骤2 签名ocx文件

运行signcode.exe

1)      选择要签名的ocx文件,由于dll不需要注册到系统,所以不必签名。

2)      选择代码签名证书公钥。

3)      选择代码签名证书私钥。

4)      其他选项均为默认设置,输入证书私钥口令,输入时间戳,再一次输入私钥口令。

步骤3 制作CAB

运行iexpress.exe

1)      选择“Create new Self Extraction Directive file”,点击下一步。

2)      选择“Create compressed files only(ActiveX Installs)”,点击下一步。

3)      点击Add,选择所有文件包括inf,点击下一步。

4)      点击Browse,输入.CAB文件的存放地址(包含所取文件名),并且要选中 “Store files using Long File Name inside Package”。点击下一步。

5)      选择“Don’t save”,一直点击下一步,直到完成。

步骤4 签名CAB

 

同步骤2,选择刚刚生成的cab包进行签名,注意签名后复制到webapp/download目录时需要更名为wvc.cab。

 

步骤5 删除ocx插件

如果想删除已安装的插件,重新注册,那么进入安装目录c:\windows\downloaded program files,选中WVC删除即可。

二、自动打包

准备工作

l  用到的工具

打包工具cabarc.exe

签名工具signcode.exe

l  打包文件

WVC.ocx

LiteUnzip.dll

mfc80u.dll

mfcm80u.dll

msvcm80.dll

msvcp80.dll

msvcr80.dll

Microsoft.VC80.CRT.manifest

Microsoft.VC80.MFC.manifest

在制作cab包之前,需要准备以上的打包、签名工具和文件,将cabarc.exe和signcode.exe复制到Java环境变量的bin目录下。打包文件全部存放在webapp/download/wvc文件夹下。更新build.xml文件。

制作步骤

步骤1 准备inf文件

参照手动打包步骤。

步骤2 修改本地时间

 

由于代码签名证书已经过期,所以需要将本地时间修改成证书还没有过期的时间,否则签名失败。如果拥有未过期的代码签名证书,此步骤可以忽略。

步骤3 执行build.xml的activex任务

在Eclipse中打开build.xml文件,执行activex任务。该任务会自动签名wvc.ocx文件,生成wvc.cab并签名。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
04-26
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值