收藏 分销(赏)

ActiveX之Web调用的打包_下载_安装和自动升级全攻略.doc

上传人:二*** 文档编号:4763010 上传时间:2024-10-12 格式:DOC 页数:36 大小:964KB 下载积分:5 金币
下载 相关 举报
ActiveX之Web调用的打包_下载_安装和自动升级全攻略.doc_第1页
第1页 / 共36页
本文档共36页,全文阅读请下载到手机保存,查看更方便
资源描述
ActiveX之Web调用的打包、下载、安装和自动升级全攻略     ActiveX之Web调用的打包、下载、安装和自动升级   1.  打包。 参看 (ActiveX控件打包成Cab置于网页中自动下载安装) 2.网页调用脚本 <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Developer Studio"> <META HTTP-EQUIV="Content-Type" content="text/html;"> <TITLE>anotherServer</TITLE> </HEAD> <BODY bgColor="#ffffaa" onLoad="resizeWin()">        <OBJECT ID="CPServer" CLASSID="CLSID:D9917347-9765-4BFA-9191-52F918295706"        HEIGHT=0 WIDTH=0 ALIGN=LEFT CODEBASE="        </OBJECT> </BODY> <SCRIPT language="JavaScript"> <!-- function resizeWin(){ //window.resizeTo(500,500) CPServer.GPlay(" } //--> </SCRIPT>   </HTML>   其中,CODEBASE="evS1300.cab,这里可以填写绝对路径(全URL路径),也可以使用相对路径。   3. 版本升级 将inf安装文件中的相应文件的版本号修改,重新打包,放到服务器上,修改上面的网页脚本的#Version=1,0,0,2部分,使版本号更大,当再次访问网页时,就会自动下载了。 注意:CODEBASE=" 这句,其中引号部分不能分隔开来,否则无法识别。我就是犯过这样的错误,当时检查了几个小时才发现。如果无法确定格式是否正确,可以把它复制到网页编辑器或者word中,如果像上面那样,被加上了超链接的下划线,就表示格式正确了。   4。数字证书 需要花钱购买。不想花钱的话,有两种办法。 (1)给用户提示,让用户按如下操作: 请按如下操作: 工具 —— internet选项 —— 安全 —— 受信任的站点 —— 点击“站点”按钮, 然后去掉 “对该区域的所有站点要求服务器验证” 复选框前面的勾 , 在“将该网站添加到区域中”的下面,输入“ 再打开该网页即可。 (2)制作exe安装包。然后,在网页中提供一个按钮用户点击后就会下载这个exe文件,然后安装,安装中,注册activex控件。在网页脚本中调用activex控件中的一个方法,进而获得activex的版本号,如果版本号过低,可以提示用户下载安装最新版本,这样就实现自动升级。   附录:ActiveX控件打包成Cab置于网页中自动下载安装 [背景]        做过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所示的工具集,则表示已下载成功:   2、设置系统环境变量,右键单击“我的电脑”à选择“属性”à选择“高级”选项卡,打开如图2所示的系统属性面版块: 3、在系统属性版块里单击“环境变量(N)”按钮,打开图3: 4、选择“系统变量(S)”里的“新建(W)”按钮,打开“编辑系统变量”对话框,如图4所示,然后在“变量值(V)”里加入“;E\makeCAB”: 二、将用于打包的OCX控件放在E盘根目录下(本文档使用名为evS1300.ocx的控件来进行介绍),如图5所示,其中evS1300.ocx是本文档进行操作的控件对象,而mfc71.dll、msvcp71.dll、msvcr71.dll这三个文件通常是进行打包时一并打包的文件,但不是必须(推荐一起打包),其可在系统中的system32目录下找到,请自行准备。 三、ActiveX发布步骤 1、单击“开始”à“动行(R)”à输入“cmd”à回车à进入到操作的控件所在的目录,如图6所示: 2、创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk evS1300 evS1300.pvk -n CN=XXXXXXX公司”,然后回车,如图7所示:   3、创建CER文件(公司证书),在命令行中输入“makecert -sk evS1300.pvk evS1300.cer”,然后回车,如图8所示,若出现“Successed”提示,则会在E:\evS1300目录下生成evS1300.cer文件,如图9所示:  4、创建SPC测试软件出版商证明书,在命令行中输入“cert2spc evS1300.cer evS1300.spc”,然后回车,如图10所示: 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  在evS1300.inf的内容里,[version]和[Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll]、[mfc71.dll]、[msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dll、mfc71.dll、msvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsid和FileVersion就是evS1300.ocx的classId和version,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classId和version呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面: 在图13的界面里,点击“File”à“Open…”,打开您所要查看的OCX控件,如图14所示: 打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“”就可以看到我们想要查找的FileVersion和classId,如图15所示: 6、创建CAB文件,在命令行中输入“cabarc -s 6144 n evS1300.cab msvcr71.dll mfc71.dll msvcp71.dll evS1300.ocx evS1300.inf”,然后回车,如图16所示: 7、使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回车),系统会弹出如图17所示的数字签名向导: 8、单击“下一步(N)”按钮,来到图18所示,选择要进行数字签名的且已做成CAB包的文件evS1300.cab文件。 9、选择好CAB包后单击“下一步(N)”按钮,在选择想要的签名类型里选择“自定议(C)”并单击“下一步(N)”按钮,如图19所示: 10、接下来单击“从文件选择(F)”按钮,选择刚刚制作的evS1300.cer,如图20所示: 11、在图20中单击“下一步(N)”按钮来到图21,然后在图21里选择“CSP中的私钥(K)”。 12、在图21中单击“下一步(N)”按钮,然后在图22中的散列算法中选择“shal”,并单击“下一步(N)”按钮。 13、在“证书路径中的证书”中选择“证书路径中的所有证书,包括根证书(C)”,在“其它证书(可选)”中选择“包括在以下PKCS #7 证书(.p7b)文件中的证书(P):”,并单击“浏览(R)…”按钮选择evS1300.spc文件,选择完后单击“下一步(N)”按钮,如图23所示: 14、接下来在弹出的“数据描述”窗口中输入公司的名称和网址并单击“下一步(N)”按钮,如图24所示: 15、现大部份工作都已完成,在接下来的一步当中是可选的操作,其作用只是为CAB加入时间戳,此步骤完全可以不做,如图25所示: (这里我提拱三个免费的代码签名时间戳地址) VeriSign:  Comodo:  GeoTrust/TrustCenter: http://www.trustcenter.de/codesigning/timestamp 16、完成,在图25中单击“下一步(N)”按钮便可来到数字签名向导的最后一步,即操作总览,如图26所示,单击“完成”按钮便可大功告成,如图27所示:   附录资料: Ehcache缓存配置 简介 Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。 你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处: ·   在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。 ·   发布时可更改Cache配置。 ·   可再安装阶段就检查出配置错误信息,而避免了运行时错误。 本文将会对ehcache.xml配置文件进行详细的阐述。在配置的时可以拷贝一个现有的ehcache.xml,如果没有请点击这里去下载。 ehcache-failsafe.xml 如果你调用了CacheManager默认构造方法去创建CacheManager的实例,此方法会到classpath中找ehcache.xml文件,否则它会到类路径下找ehcache-failsafe.xml文件。而ehcache-failsafe.xml被包含在jar包中,所有它肯定能找的到。 ehcache-failsafe.xml提供了一个非常简单的默认配置,这样可以使用户在没有创建ehcache.xml的情况下使用Ehcache。 不过这样做Ehcache会提醒用户创建一个正确的Ehcache配置。 ehcache.xml片段: <ehcache>     <diskStore path="java.io.tmpdir"/>     <defaultCache             maxElementsInMemory="10000"             eternal="false"             timeToIdleSeconds="120"             timeToLiveSeconds="120"             overflowToDisk="true"             maxElementsOnDisk="10000000"             diskPersistent="false"             diskExpiryThreadIntervalSeconds="120"             memoryStoreEvictionPolicy="LRU"             /> </ehcache> ehcache.xml和其他配置文件 在Ehcache-1.6之前的版本,只支持ASCII编码的ehcache.xml配置文件。在Ehcach-1.6之后版本中,支持UTF8编码的ehcache.xml配置文件。因为向后兼容,所有采用ASCII编码的配置文件完全没有必要转换为UTF8。 一个CacheManager必须要有一个XML配置。由于磁盘路径或是监听端口,多个CacheManager使用同一个配置文件时会出现错误。 下面是ehcache.xml具体实例以及配置指南 <ehcache xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance ·   CacheManager配置 DmulticastGroupPort=4446,这样可以配置监听端口。 ·   DiskStore配置 如果你使用的DiskStore(磁盘缓存),你必须要配置DiskStore配置项。如果不配置,Ehcache将会使用java.io.tmpdir。 diskStroe的“path”属性是用来配置磁盘缓存使用的物理路径的,Ehcache磁盘缓存使用的文件后缀名是.data和.index。 <disStore path=”java.io.tmpdir”/> ·   CacheManagerEventListener配置 我们通过CacheManagerEventListenerFactory可以实例化一个CacheManagerPeerProvider,当我们从CacheManager中added和removed Cache时,将通知CacheManagerPeerProvider,这样一来,我们就可以很方面的对CacheManager中的Cache做一些统计。 注册到CacheManager的事件监听类名有: adding a Cache和removing a Cache <cacheManagerEventListenerFacotory class=”” properties=””/> ·   CacheManagerPeerProvider配置 在集群中CacheManager配置CacheManagerPeerProviderFactory创建CacheManagerPeerProvider。具体的实例如下: <cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution. RMICacheManagerPeerProviderFactory" properties="peerDiscovery=manual, rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1| //server1:40000/sampleCache2|//server2:40000/sampleCache2" propertySeparator="," /> ·   CacheManagerPeerListener配置 CacheManagerPeerListener配置是用来监听集群中缓存消息的分发的。 <cacheManagerPeerListenerFactory     class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"     properties="hostName=fully_qualified_hostname_or_ip,                 port=40001,                socketTimeoutMillis=120000"                 propertySeparator="," /> ·   Cache配置 ·           name:Cache的唯一标识 ·           maxElementsInMemory:内存中最大缓存对象数。 ·           maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。 ·           eternal:Element是否永久有效,一但设置了,timeout将不起作用。 ·           overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。 ·           timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 ·           timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。 ·           diskPersistent:是否缓存虚拟机重启期数据。(这个虚拟机是指什么虚拟机一直没看明白是什么,有高人还希望能指点一二)。 ·           diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。 ·           diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 ·           memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。 ·   Cache Exception Handling配置 <cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory"                               properties="logLevel=FINE"/> 总结 这里只对通用缓存的配置做了详细的阐述,至于RMI缓存和集群缓存可以参考这里。 下面给出几个配置示例: ·   Ehcache默认Cache配置 <defaultCache         maxElementsInMemory="10000"         eternal="false"         timeToIdleSeconds="120"         timeToLiveSeconds="120"         overflowToDisk="true"         diskSpoolBufferSizeMB="30"         maxElementsOnDisk="10000000"         diskPersistent="false"         diskExpiryThreadIntervalSeconds="120"         memoryStoreEvictionPolicy="LRU"         /> ·   SampleCache1配置 简单配置,在ehcache.xml文件中有此配置,在使用Ehcache前最好将其删除掉,自己配置。 缓存名sampleCache1,内存中最多可缓存10000个Element,其中的element会在闲置5分钟或是存活10分钟之后失效。 超过10000element时,element将会输出到磁盘中,输出路径是java.io.tmpdir。 <cache name="sampleCache1"        maxElementsInMemory="10000"        maxElementsOnDisk="1000"        eternal="false"        overflowToDisk="true"        diskSpoolBufferSizeMB="20"        timeToIdleSeconds="300"        timeToLiveSeconds="600"        memoryStoreEvictionPolicy="LFU"         /> ·   SampleCache2配置 Cache名为SampleCache2,内存中最多可以缓存1000个element,超出1000不能输出到磁盘中。缓存是永久有效的。 <cache name="sampleCache2"        maxElementsInMemory="1000"        eternal="true"        overflowToDisk="false"        memoryStoreEvictionPolicy="FIFO"         /> ·   SampleCache3配置 Cache名为SampleCache3。可缓存到磁盘。磁盘缓存将会缓存虚拟机重启期的数据。磁盘缓存失效线程运行间隔时间是10分钟。 <cache name="sampleCache3"        maxElementsInMemory="500"        eternal="false"        overflowToDisk="true"        timeToIdleSeconds="300"        timeToLiveSeconds="600"        diskPersistent="true"        diskExpiryThreadIntervalSeconds="1"        memoryStoreEvictionPolicy="LFU"         /> ·   sampleDistributedCache1配置 Cache名为sampleDistributedCache1。 <cache name="sampleDistributedCache1"        maxElementsInMemory="10"        eternal="false"        timeToIdleSeconds="100"        timeToLiveSeconds="100"        overflowToDisk="false">     <cacheEventListenerFactory             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>     <bootstrapCacheLoaderFactory             class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/> </cache> ·   sampleDistributedCache2配置 <cache name="sampleDistributedCache2"        maxElementsInMemory="10"        eternal="false"        timeToIdleSeconds="100"        timeToLiveSeconds="100"        overflowToDisk="false">     <cacheEventListenerFactory             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"             properties="replicateAsynchronously=false, replicatePuts=false,                         replicateUpdates=true, replicateUpdatesViaCopy=true,                        replicateRemovals=false"/> </cache> ·   sampleDistributedCache3配置 <!-- Sample distributed cache named sampleDistributedCache3. This cache replicates using defaults except that the asynchronous replication interval is set to 200ms. --> <cache name="sampleDistributedCache3"        maxElementsInMemory="10"        eternal="false"        timeToIdleSeconds="100"        timeToLiveSeconds="100"        overflowToDisk="false">     <cacheEventListenerFactory             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"             properties="asynchronousReplicationIntervalMillis=200"/> </cache>
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服