1.将控件打包成cab,在codebase指向这个cab和正确的版本号就可以自动提示安装,前提是客户端浏览器要有相应的安全设置.
2.关于没有安装提示,可以用脚本检测.
如这个控件的id为object1

可检查它的某个属性或方法是否存在

if(typeof(object1.某方法) == "undefined"))
{
    alert("请先安装播放控件!");
}
当客户端的控件的版本号低于HTML页面中的代码指定的版本号时,会自动更新的


做过
ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必须进行本地的注册,也就是说用户得首先要把该ActiveX控件(test.ocx)放在本机的%system%/system32下,然后运行DOS工具里面运行regsvr32 test.ocx命令进行注册。但如果真是这么去做的话,那么代表着你处于危险之中了,因为您是通过让用户自己去部署设置环境来达到你的目的,这就失去软件项目本身所存在的价值。那么面对这种情况,我们应该如何解决呢?聪明的你一定会很快就想到,我们可以使用户在客户端自动下载安装该ActiveX控件,这样一来即可以实现我们所想要的功能,又不需要用户自己去部署设置环境,这岂不是一举两得。

[必备条件]

一、用于将ActiveX控件进行打包并加数据鉴名的工具集:

makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥和公钥。

cert2spc.exe  cer格式证书转换成spc格式证书,即PKCS #7证书。

cabarc.exe   ocx打包成cab

signcode.exe 将证书签署到ocx上去。

chktrust.exe  检查签署证书后的ocx是否正确。

certmgr.exe 是管理证书用的。

 

二、用于进行打包用的ocx控件evS1300.ocx

三、用于查看ocx控件的工具ActvxDoc

[制作过程]

一、环境设置

1、下载makeCAB包,解压到本地目录(如E盘根目录),如查看到如图1所示的工具集,则表示已下载成功:

(1makeCAB包的工具集)

       2、设置系统环境变量,右键单击“我的电脑”à选择“属性”à选择“高级”选项卡,打开如图2所示的系统属性面版块:

(2:系统属性版块)

       3、在系统属性版块里单击“环境变量(N)”按钮,打开图3

(3:系统变量)

       4、选择“系统变量(S)”里的“新建(W)”按钮,打开“编辑系统变量”对话框,如图4所示,然后在“变量值(V)”里加入“;E"makeCAB”:

(4:编辑系统变量)

 

二、将用于打包的OCX控件放在E盘根目录下(本文档使用名为evS1300.ocx的控件来进行介绍),如图5所示,其中evS1300.ocx是本文档进行操作的控件对象,而mfc71.dllmsvcp71.dllmsvcr71.dll这三个文件通常是进行打包时一并打包的文件,但不是必须(推荐一起打包),其可在系统中的system32目录下找到,请自行准备。

(5;用于操作的OCX控件路径)

 

三、ActiveX发布步骤

1、单击“开始”à“动行(R)”à输入“cmdà回车à进入到操作的控件所在的目录,如图6所示:

(6:进入E:"evS1300目录)

2创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk evS1300 evS1300.pvk -n CN=XXXXXXX公司”,然后回车,如图7所示:

(7创建PVK文件)

       3、创建CER文件(公司证书)在命令行中输入“makecert -sk evS1300.pvk evS1300.cer”,然后回车,如图8所示,若出现“Successed”提示,则会在E:"evS1300目录下生成evS1300.cer文件,如图9所示:

(8:创建CER文件)

 

(9:生成evS1300.cer)

       4、创建SPC测试软件出版商证明书,在命令行中输入“cert2spc evS1300.cer evS1300.spc”,然后回车,如图10所示:

(图10:创建SPC测试软件出版商证明书)

       5、创建INF文件,用记录本编辑以下信息

  1. [version]   
  2. signature="$CHINA$"  
  3. AdvancedINF=1.0  
  4.   
  5. [Add.Code]   
  6. evS1300.ocx=evS1300.ocx   
  7. msvcr71.dll=msvcr71.dll   
  8. mfc71.dll=mfc71.dll   
  9. msvcp71.dll=msvcp71.dll   
  10.   
  11. [evS1300.ocx]   
  12. file=thiscab   
  13. clsid={0440906E-9BD6-4F3E-B65A-39E1B339D9DA}   
  14. FileVersion=1,0,0,0  
  15. RegisterServer=yes   
  16.   
  17. [msvcr71.dll]   
  18. file-win32-x86=thiscab   
  19. RegisterServer=no   
  20. DestDir=11  
  21. FileVersion=7,10,3052,4  
  22.   
  23. [mfc71.dll]   
  24. file-win32-x86=thiscab   
  25. RegisterServer=no   
  26. DestDir=11  
  27. FileVersion=7,10,3077,0  
  28.   
  29. [msvcp71.dll]   
  30. file-win32-x86=thiscab   
  31. RegisterServer=no   
  32. DestDir=11  
  33. FileVersion=7,10,3077,0  

     如图11所示,并保存为E:"evS1300"evS1300.inf,如图12所示

 

(11evS1300.inf)

(12:保存evS1300.inf)

       evS1300.inf的内容里,[version][Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll][mfc71.dll][msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dllmfc71.dllmsvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsidFileVersion就是evS1300.ocxclassIdversion,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classIdversion呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面:

(13ActiveX Documenter)

在图13的界面里,点击“FileàOpen…”,打开您所要查看的OCX控件,如图14所示:

(14:打开控件)

打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“”就可以看到我们想要查找的FileVersionclassId,如图15所示:

(图15:控件属性)

       6、创建CAB文件,在命令行中输入“cabarc -s 6144 n evS1300.cab msvcr71.dll mfc71.dll msvcp71.dll evS1300.ocx evS1300.inf”,然后回车,如图16所示:

(图16:创建CAB文件)

       7、使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回车),系统会弹出如图17所示的数字签名向导:

(图17:数字签名向导)

       8、单击“下一步(N)”按钮,来到图18所示,选择要进行数字签名的且已做成CAB包的文件evS1300.cab文件。

(18:选择CAB)

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1805146

posted on 2008-03-11 10:06  小角色  阅读(2141)  评论(0编辑  收藏  举报