将ocx和DLL文件打包成cab文件实现IE浏览器在线安装Word文件下载.docx
- 文档编号:22866916
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:13
- 大小:22.84KB
将ocx和DLL文件打包成cab文件实现IE浏览器在线安装Word文件下载.docx
《将ocx和DLL文件打包成cab文件实现IE浏览器在线安装Word文件下载.docx》由会员分享,可在线阅读,更多相关《将ocx和DLL文件打包成cab文件实现IE浏览器在线安装Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
id="
Slider1"
width="
100"
height="
50"
>
<
paramname="
BorderStyle"
value="
1"
/>
MousePointer"
0"
Enabled"
Min"
Max"
10"
width="
参考
Windows中注册类ID:
clsid
“通用唯一标识符”(UUID),用于标识COM组件。
每个COM组件在Windows注册表中都有自己的CLSID,以便让其他应用程序加载。
ActiveX控件CLSID的获取
在编译完成每一个ActiveX控件之后,系统会生成ocx.html文件,其中是调用该ActiveX控件的方法。
该页面中有一个标签即为Object,其中有一行则记录着该ocx文件的CLSID,如下:
objectID="
TopoSceneViewer"
WIDTH=800HEIGHT=600CLASSID="
CLSID:
321B84C8-3745-4AC9-BF04-55753F40CE63"
object
ID="
WIDTH=800
HEIGHT=600
CLASSID="
创建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="
AdvancedINF=2.0"
Signature"
项定义了该INF文件需要运行在何种操作系统版本中。
有$WindowsNT$,$Chicago$,or$Windows95$三个值供选择,一般选择$Chicago$即可。
接下来就是最重要的[Add.Code]区:
[Add.Code]Ctrl1.dll=C1SectionCtrl2.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=thiscabRegisterServer=yesclsid={.....}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就是苹果MACOX了;
第三部分是CPU类型,比如说x86、ppc(PowerPC)、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下的DownloadedProgramFiles目录下;
最后是FileVersion,这个就比较明显了,说明了ctrl1.dll的版本号。
其他部分详见参考文献。
如果需要创建cab文件,首先需要Cabarc或者Makecab,它们随着CabinetSDK的安装就有了,CabinetSDK的下载地址是
Cabarc可以创建、查看或者解出cab里面的文件,而Makecab则只可以用来创建cab文件。
制作cab文件时需要将所有的相关文件都包含进去,可以通过Depends(VC自带的)检查需要的文件。
使用inf文件将这些东西都写进去。
inf搞法:
inf文件描述cab中所有的ocx及dll文件,inf通过一些命名区域来提供需要的信息。
cabarcNctrl1.cabctrl1.infctrl1.dllcabarcNctrl1.cabctrl1.infctrl1.dllN表示要创建一个新的文件,ctrl1.cab是创建的文件名,ctrl1.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。
然后就可以将cab文件放到网页上了
参考
如何编写INF:
如何写cab相关的INF:
签名
申请证书
要使用到makecert工具,在VS2005目录下搜索可以搜索到。
在命令提示行中执行
makecert-skmyNewKey-r-n"
CN=发证机关的名字,OU=Certification,O=公司名字,E=name@"
-ssmymyNew.cercert2spcmyNew.cermyNew.spcmakecert-skmyNewKey-r-n"
-ssmymyNew.cer
cert2spcmyNew.cermyNew.spcmakecert具体使用帮助可参考创建证书的工具(makecert.exe)
要使用到signtool工具,也可以在VS2005目录下找到。
signtool工具有多种使用模式,下面使用的是带UI的向导模式。
signtoolsignwizardsigntoolsignwizard之后进入signcodewizard:
step1.选择要签名的cab文件step2.自定义step3.从文件中选择myNew.spcstep4.csp中的私钥/密钥容器:
myNewKeystep5.sha1step6.nextstep7.描述:
插件名称/web:
step8.step1.选择要签名的cab文件
step2.自定义
step3.从文件中选择myNew.spc
step4.csp中的私钥/密钥容器:
myNewKey
step5.sha1
step6.next
step7.描述:
step8.signtool的具体使用帮助可参考签名工具(SignTool.exe)
一、程序描述:
程序环境:
windowsXpsp2,ie6,tomcat5.5,vc++6.0
程序过程:
控件做成ocx文件,用于客户端调用本地硬件,其中有用到第三方几个.dll文件。
采用windows自带iexpress.exe打包成cab文件,在服务器端jsp页面进行控件调用,下载cab文件并自动注册。
二、程序问题:
遇到问题:
1.
cab文件无法下载,而且根本不加提示。
2.
下载好的cab文件在system32中能够看到,但是页面仍然不能显示,一把红叉,并且无法使用。
问题测试:
浏览器页面根本没有下载提示,考虑应该是cab的路径问题,也曾考虑是ie浏览器的安全问题。
将安全降到最低测试。
反复更改cab路径。
这个问题最郁闷,搞了很久。
考虑首先是安全问题,然后在网上搜索之后说是sp2调高了安全策略,有说降低安全,有说需要对程序进行数字签名。
问题解决:
确实是路径不对,与安全无关。
当在jsp中代码为:
OBJECTid=poscodebase="
TestCAB.CAB#version=1,0,0,1"
height=100width=100classid="
719A1D6E-7099-4123-9D63-F0118AFF2D61"
VIEWASTEXT>
/OBJECT>
TestCAB.CAB文件应该放置在tomcat5.5安装目录Tomcat5.5\webapps下该调用jsp所在的工程下。
不需要更改安全级别,而应该在Internet选项-〉安全-〉受信任的站点-〉站点中添加服务器地址。
注意:
不要选复选框“对该区域中的所有站点要求服务器验证”。
三、总结:
1.将ocx文件以及第三方dll文件打包成cab文件:
Internet软件分发单位是“软件包”,它由包含.INF文件或软件分发.OSD文件(或两者都包括)的.CAB文件所组成。
一个分发单位也可以包含软件组件,如ActiveX控件(.OCX)、.DLL文件、.EXE文件、Java类文件或小程序。
当Web页上OBJECT元素的CODEBASE特性引用包含.INF文件的.CAB文件时,InternetExplorer将自动把.CAB文件作为软件分发单位下载并安装,每次访问时还会自动检测版本并进行更新。
INF文件是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如.DLL或者其它.OCX)。
一个.INF文件就捆绑了.CAB压缩文件所有的必须文件。
缺省情况下,与现有硬盘中文件版本号相同的文件不被下载。
先自己写了一个inf文件,其中信息包括将.ocx文件,以及相关的.dll文件打包,并下载到文件夹:
\WINDOWS\system32,详细标注如下:
[version]
$CHICAGO$"
AdvancedINF=2.0
[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
[DestinationDirs]
install.files=11
[SourceDisksNames]
1=%DiskName%,TestCAB.CAB,1
[Add.Code]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll
pcpos.dll=pcpos.dll
TCPCLNT.dll=TCPCLNT.dll
[install.files]
[SourceDisksFiles]
pcpos.ocx=1
Comm.dll=1
pcpos.dll=1
TCPCLNT.dll=1
[pcpos.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={719A1D6E-7099-4123-9D63-F0118AFF2D61}
DestDir=11
FileVersion=1,0,0,1
[Comm.dll]
[pcpos.dll]
[TCPCLNT.dll]
[RegisterFiles]
%11%\pcpos.ocx
注释:
"
thiscab"
是一个关键字,意指包含该INF的CAB文件。
也可以从网上下载所需要的DLL文件,只要指定一个HTTP网址即可,如:
file-win32-x86=
关键字"
file-win32-x86"
指定平台是x86。
文件版本号可见属性。
DestDir"
指的是装载目录或者文件的地址:
11指定为系统目录WINDOWS//SYSTEM32;
clsid"
指的是要安装控件的CLSID。
制作cab:
使用\WINDOWS\system32\iexpress.exe。
1)
选择“CreatenewSelfExtractionDirectivefile”,点击下一步。
2)
选择“Createcompressedfilesonly(ActiveXInstalls)”,点击下一步。
3)
点击Add,文件添加(pcpos.ocx,pcpos.dll,comm.dll,tcpclnt.dll),点击下一步。
4)
点击Browse,输入.CAB文件的存放地址(包含所取文件名),这里取TestCAB.CAB,并且要选中“StorefilesusingLongFileNameinsidePackage”。
点击下一步。
5)
选择“Don’tsave”,一直点击下一步,直到完成。
如果控件已经在客户机注册,并且不是通过.CAB的方式注册,那么通过.CAB自动注册的时候,该控件将无法被更新。
必须先手动删除该文件。
2.对CAB文件进行数字签名
传说中数字签名之后就可以不出现提示而自动下载,所以也试试:
在\MicrosoftVisualStudio.NET2003\SDK\v1.1\Bin中间有三个小工具,就用他们来实现数字签名。
1.Makecert.exe---证书创建工具
2.Cert2Spc.exe---发行者证书测试工具
3.Signcode.exe---文件签名工具
步骤:
makecert-ssname-n"
CN=公司名"
-svd:
\pos.pvk-rd:
\pos.cer其中sk-表示主题的密钥容器位置,ss-主题的证书存储名称,n-证书颁发对象,r-证书存储位置,-sv导出私钥文件(为了签名使用)。
这个时候会让输入三次密码,三次要完全一致。
使用Cert2Spc生成spc发行者证书(可选):
cert2spcd:
\pos.cerc:
\pos.spc
双击signcode,不带参数会启动签名向导。
先选择要签名文件,下一步,选择“自定义”,下一步,选择“从文件选择”,添加刚生成的pos.cer证书,下一步,选择刚生成的私钥pos.pvk,再下一步,可spc证书,再一直下一步。
添加时间戳,在时间戳填入http:
//TestCAB.CAB,再下一步完成。
这样就对CAB文件进行了签名,但是这个时候点击这个文件会发现证书不可用,原因是证书没有安转。
文件属性->
数字证书->
详细信息-〉查看证书-〉安装证书,进入安装证书向导,存放区域选择“受信任的根证书颁发机构”,点击完成即可。
在客户端测试:
加入证书,浏览器-〉工具-〉Internet选项-〉内容-〉证书-〉受信任的颁发机构-〉导入证书。
在有证书的情况下,如果服务器没有加入“可信任网址”,提示下载的时候会显示证书所签内容,没有证书则提示为“未知”。
如果服务器已加入“可信任网址”,并且已导入证书,则不提示任何信息,在用户毫无感觉情况下下载。
如果没有加入“可信任网址“,控件可以正常下载但仍然不能正常使用,与是否签名无关。
四、问题:
1.是否可以不添加“可信任网址”。
2.数字签名的作用,授权证书与不授权证书的区别。
出师表
两汉:
诸葛亮
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。
然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。
诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
宫中府中,俱为一体;
陟罚臧否,不宜异同。
若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;
不宜偏私,使内外异法也。
侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:
愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督:
愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
亲贤臣,远小人,此先汉所以兴隆也;
亲小人,远贤臣,此后汉所以倾颓也。
先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。
侍
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ocx DLL 文件 打包 cab 实现 IE 浏览器 在线 安装
![提示](https://static.bdocx.com/images/bang_tan.gif)