cab文件打包的ActiveX控件 activex控件 cab

cab文件打包的ActiveX控件(转)

程序环境:Windows Xp SP2, IE 6, Tomcat 6.0, VC++6.0

利用MFC开发的ActiveX控件要正常运行必须依赖MFC库。但是你不能保证你用户的机器上装有与你开发环境相同的库,所以,当你发行一个ActiveX控件,你必须要包证这些依赖库的存在。

ActiveX控件做成ocx文件,用于客户端调用本地程序,其中有用到VC中的几个.dll文件。包成cab文件,在服务器端页面进行控件调用,下载cab文件并自动注册、使用。

ActiveX控件调用到其他的DLL程序模块,那么IE也必须把这些程序下载到本地来。为此,Microsoft采用了惯用的CAB压缩方法,它把 ActiveX控件应用程序以及相关的其他文件放在同一个CAB文件中,然后在CODEBASE属性中指定CAB文件的URL路径。 当IE找到CODEBASE属性时,它会自动解析URL地址从而把CAB文件解压到客户机的临时目录,然后注册有关文件,调用COM API函数创建ActiveX控件对象。这样就完成了ActiveX控件的传输。

目前制作CAB 文件的软件有主要有Cabarc和WinCAB。

Cabarc是一个用于压缩、列出压缩包中的文件、解压CAB文件的工具。Cabarc支持通配符和递归路径搜索。不过Cabarc使用一个类似于常用的压缩工具的命令行界面,并且有较多的参数,与现在主流的Windows操作系统不太协调,使用起来不是很方便。

WinCAB 是一种可视化的全新的CAB压缩包制作软件,它具有采用图形界面、支持分卷压缩、可制作具有自解包功能的CAB压缩包(*.EXE文件格式)等优秀功能, 这就从根本上解决了CAB压缩包的制作问题。需要注意的是在运行WinCAB.exe时,必须确保makecab.exe文件也在相同的目录下。

创建 INF 文件

当用户第一次浏览你控件所在的网页时,它会自动提示控件下载,包括*.inf文本文件中涉及的OCX控件文件以及 DLL文件(控件依赖的MFC库文件,ocx控件也是一种特殊的DLL),并自动注册控件及库文件,然后控件即可以正常使用。控件及库文件只需要下载一 次,当客户端上已有 MFC DLL 时,则不对它们进行下载(默认情况下,版本号同用户硬盘上的现有文件相同的文件不下载)。

INF 文件是一个文本文件,用以指定为控件的运行而需要下载的文件(如 DLL 库文件和 OCX 控件文件)。INF 文件说明都有哪些文件要捆绑在一个压缩的 CAB 文件中。

XMS_Agent.inf文件内容如下:

; Sample INF file for XMS_Agent.OCX

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Add.Code]

XMS_Agent.ocx=XMS_Agent.ocx

mfc42.dll=mfc42.dll

msvcrt.dll=msvcrt.dll

olepro32.dll=olepro32.dll

wsock32.dll=wsock32.dll

[XMS_Agent.ocx]

file-win32-x86=thiscab

clsid={997A9783-1815-4820-A2B9-DAB8F0332681}

FileVersion=1.0.0.1

RegisterServer=yes

; needed DLL

[msvcrt.dll]

file-win32-x86=thiscab

FileVersion=7.0.2600.2180

DestDir=11

RegisterServer=yes

[mfc42.dll]

file-win32-x86=thiscab

FileVersion=6.2.4131.0

DestDir=11

RegisterServer=yes

[olepro32.dll]

file-win32-x86=thiscab

FileVersion=5.1.2600.3266

DestDir=11

RegisterServer=yes

[wsock32.dll]

file-win32-x86=thiscab

FileVersion=5.1.2600.2180

DestDir=11

RegisterServer=yes

; end of INF file

“thiscab”是一个关键字,表示需要的文件在包含此INF文件的CAB包中。也可通过指定一个相对路径,从一个 HTTP 位置下载所需的 DLL,例如:

file-win32-x86=http://你的网站地址/NEEDED.DLL

关键字“file-win32-x86”将平台标识为 x86。

FileVersion指文件版本号。可以通过在 Windows 资源管理器中的文件上单击鼠标右键来获取文件的版本号。

从显示的列表中选择“属性”,然后在显示的对话框中选择“版本”选项卡。

有时需要在文件版本中额外插入一个 0,例如,在对话框中 ATL.DLL 的版本号如果显示为 2.00.7026。而在 INF 文件中,需要变为 2, 00, 0, 7026。

控件的文件版本可以通过 Visual Studio 的版本资源获得。

从文件菜单中,选择打开,然后单击打开为(Open as): 资源,打开控件OCX文件;所需的文件版本就在 FILEVERSION 后面列出。

“DestDir”是文件要下载到的目录位置:11 指定系统目录 WINDOWS/SYSTEM 或 WINNT/SYSTEM32;

10 指定 Windows或WINNT目录。

如果未指定任何 DestDir(典型情况),则代码安装在固定的 OCCACHE临时目录中。

“clsid”是将要安装的控件的 CLSID。

下边是个在网上发布控件,在微软网站下载mfc42.cab的例子:

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Add.Code]

YourCtl.ocx=YourCtl.ocx

mfc42.dll=mfc42.dll

msvcrt.dll=msvcrt.dll

olepro32.dll=olepro32.dll

[YourCtl.ocx]

file-win32-x86=thiscab

clsid={YourCtl.ocx的CLSID} //在YourCtl.odl文件中可以找到

FileVersion=1,0,0,1

RegisterServer=yes

[msvcrt.dll]

FileVersion=6,0,8168,0

hook=mfc42installer

[mfc42.dll]

FileVersion=6,0,8168,0

hook=mfc42installer

[olepro32.dll]

FileVersion=5,0,4261,0

hook=mfc42installer

[mfc42installer]

file-win32-x86=VALUE=http://activex.microsoft.com/controls/vc/mfc42.cab

run= % EXTRACT_DIR % mfc42.exe

打包文件

使用Cabarc:

下载 Cabinet 软件开发工具包(也称为 Cabinet SDK 或 CAB 开发工具包),解压缩后可以找到构造 CAB (.cab) 文件所需的工具CABARC.EXE文件。

Cabinet 软件包下载地址请参见以下 Microsoft 网站:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncabsdk/html/cabdl.asp

把控件文件、库文件(vc6.0MFC库文件包括mfc42.dll、msvcrt.dll、olepro32.dll、wsock32.dll)、打包 命令文件CABARC.EXE,以及控制 ActiveX 控件安装的 .inf 文件放在同一目录下,运行以下DOS命令打包控件:

cabarc.exe -s 6144 N XMS_Agent.cab XMS_Agent.ocx XMS_Agent.inf mfc42.dll msvcrt.dll olepro32.dll wsock32.dll

使用WinCAB:(其中注意Makecab.exe要在WinCAB目录下)

启动WinCAB,然后执行“Cabinet”菜单的“New”命令或单击快捷工具栏上的“New cabinet”按钮,准备制作新的CAB压缩包。

单击快捷工具栏上的“Add file(s) to cabinet”按钮,打开“Add file(s) to cabinet”对话框。

选择欲添加到CAB压缩包中的文件后单击“打开”按钮,将它们添加到WinCAB的文件列表中。这里只需要添加YourCtl.ocx和YourCtl.inf以及所需dll文件。

在WinCAB快捷工具栏的“Cabinet path and name”框中输入或利用“Browse for path and name”按钮指定CAB压缩包的路径及文件名。

在“Cabinet size”栏中指定CAB压缩包的尺寸。

在“Compression method”框中选择合适的压缩方式。

单击“Save cabinet”按钮,WinCAB即会按照用户的要求进行压缩。

压缩完成后,WinCAB会给出一个“WinCAB Report”的报告框,向广大用户报告有关文件个数、压缩前后的文件尺寸、压缩率、压缩时间等情况。至此,一个CAB文件就生成了。

使用WINDOWSsystem32iexpress.exe:(在网上看见的,没用过)

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

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

点击Add,文件添加(XMS_Agent.ocx、XMS_Agent.inf、mfc42.dll、msvcrt.dll、olepro32.dll、wsock32.dll),点击下一步。

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

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

由于CAB的压缩率比我们常用的ARJ、ZIP、RAR等压缩包要高许多(约20%),从而进一步的减少了压缩文件所占用的磁盘空间,当采用该技术在Internet上传输ActiveX控件时既减少了网络流量,也加快了网页打开的速度。

另外,由于CAB压缩包具有“只读”属性,在创建完成后即不允许再作任何修改、删除,因此不易受到病毒、误操作等问题的影响,安全性也具有保证,实为广大用户在Windows 下进行文件的压缩、备份工作时的最佳选择。

注:**基金项目**,国家973计划,(编号:G1998030600)。

关于证书和签名

这部分没涉及到……,也不知道真正的用意,下边是抄袭过来的,有待以后的理解。

传说中数字签名之后就可以不出现提示而自动下载:

Program FilesMicrosoft Visual Studio .NET 2003SDKv1.1Bin下有关于证书和签名相关工具

Makecert.exe ---证书创建工具

Cert2Spc.exe ---发行者证书测试工具

Signcode.exe ---文件签名工具

建立自己的根证书:

步骤:

1) makecert -ss name -n "CN=公司名" -sv d:pos.pvk -r d:pos.cer

其中sk-表示主题的密钥容器位置,ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置,-sv 导出私钥文件(为了签名使用)。

注意:这个时候会让输入三次密码,三次要完全一致。

2) 使用Cert2Spc生成spc发行者证书(可选):

cert2spc d:pos.cer c:pos.spc

3) 双击signcode,不带参数会启动签名向导。先选择要签名文件,下一步,选择“自定义”,下一步,选择“从文件选择”,添加刚生成的pos.cer证 书,下一步,选择刚生成的私钥pos.pvk,再下一步,可spc证书,再一直下一步。添加时间戳,在时间戳填入http: //timestamp.verisign.com/scripts/timstamp.dll,再下一步完成。

这样就对CAB文件进行了签名,但是这个时候点击这个文件会发现证书不可用,原因是证书没有安转。文件属性->数字证书->详细信息-〉查看证书-〉安装证书,进入安装证书向导,存放区域选择“受信任的根证书颁发机构”,点击完成即可。

创建包含控件的网页

贴入测试页面代码:

<HTML>

<HEAD>

<TITLE>socket_ocx</TITLE>

<script type="text/javascript">

OpenSocket();

</script>

</HEAD>

<BODY >

<!-- 事件 -->

<script language="javascript" event="etEventCallin(recvstr,mainId)" for="KeygoeOcx">

if(RecvText.innerText=="")

{

RecvText.innerText="Event:<etEventCallin> "+"来电号码:<"recvstr+"> "+"MainID:<"+mainId+">";

}

else

{

RecvText.innerText=RecvText.innerText+"n"+"Event:<etEventCallin> "+"来电号码:<"recvstr+"> "+"MainID:<"+mainId+">";

}

</script>

<!-- 方法 -->

<script language="javascript">

var strIP = "192.168.1.19"; // SOCKET服务端IP地址

var nWorkID = 101; // 工号

// 打开Socket连接

function OpenSocket(){

KeygoeOcx.etOpenEx(strIP);

}

// 关闭Socket连接

function CloseSocket(){

KeygoeOcx.etClose();

}

// 签入

function Login(){

KeygoeOcx.etLogin(nWorkID);

}

// 签出

function Logout(){

KeygoeOcx.etLogout();
cab文件打包的ActiveX控件 activex控件 cab

}

</script>

<!-- 加载 -->

<OBJECT width="0" height="0" ID="KeygoeOcx" WIDTH=100 HEIGHT=51

codebase="http://192.168.1.19:8080/XMS_Agent.cab#Version=1,0,0,1"

CLASSID="CLSID:997A9783-1815-4820-A2B9-DAB8F0332681">

<PARAM NAME="_Version" VALUE="65536">

<PARAM NAME="_ExtentX" VALUE="2646">

<PARAM NAME="_ExtentY" VALUE="1323">

<PARAM NAME="_StockProps" VALUE="0">

</OBJECT>

<!-- 界面 -->

接收内容:<br>

<textarea id=RecvText cols=50 rows=5 ></textarea>

<br>

<button id="btnOpenSocket" onclick="OpenSocket()">打开Socket连接</button>

<button id="btnCloseSocket" onclick="CloseSocket()">关闭Socket连接</button>

<br>

<button id="btnOpenSocket" onclick="Login()">签入</button>

<button id="btnOpenSocket" onclick="Logout()">签出</button>

<br>

</BODY>

</HTML>

注:如果本机使用可以codebase="http://localhost/testactivex/XMS_Agent.cab#Version=1,0,0,001"

testactivex为在本地机创建的虚拟目录。

发布XMS_Agent.cab文件,把cab文件放在Tomcat的WebappsROOT下还是Tomcatwebapps下该调用所在的工程下??启动Tomcat。

测试控件下载和运行

应该在Internet选项-〉安全-〉受信任的站点-〉站点 中添加服务器地址。注意:不要选复选框“对该区域中的所有站点要求服务器验证”。

等待对方答复是否好使中....

二:

发布ActiveX控件(把ocx做成cab发布) --activex数字签名

2009-08-13 15:16

最 近我正在研究ActiveX技术。我使用Delphi 7创建了一个具有ActiveForm的ActiveX控件应用程序。这个控件产生一个.OCX文件。现在,我需要把这个控件部署在服务器端,在用户浏览 网页并选择安装这个控件的时候,用户的IE才会下载、安装并显示这个控件。

但是我的控件必须作数字签名以后,IE才会下载安装。问题是如何给ActiveX控件作数字签名呢?现将具体步骤与大家分享。

首先我需要一套做数字签名的工具。如果你没有,可以到以下地址下载:

http://www.cnblogs.com/Files/babyt/SignTool.rar

控件的名字是CustForm.ocx。首先,我们需要创建一个.CAB文件用来把所有需要发布的文件压缩在一起。我们需要一起发布的文件是 CustForm.lic文件。它是Delphi在我们创建控件工程的时候为我们生成的。如果不发布这个文件,你的控件即使下载安装成功,IE也无法显示 它。为了在一个.CAB文件中发布多个文件,我们必须先创建一个.INF文件。一个.INF文件可以告诉IE,它需要下载的文件和在哪里可以得到这些文 件。

1. 创建.INF文件

创建一个.INF文件很简单,用记事本程序编写就可以了。我们把我们的.INF文件取名为GMTestX.inf。因为我们要在.CAB文件中放入GMTest.ocx和GMTest.lic这两个文件,所以我们的.INF文件的内容如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Add.Code]

CustForm.ocx=CustForm.ocx

CustForm.lic=CustForm.lic //如果创建Active Form时没有选择Make Conctrol Lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

[CustForm.ocx]

file-win32-x86=thiscab

clsid={C504DF79-C5EC-4314-AC3E-1F770DB81A01}

FileVersion=1,0,0,0

RegisterServer=yes

[CustForm.lic]//如果创建Active Form时没有选择Make Conctrol Lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

file-win32-x86=thiscab//如果创建Active Form时没有选择Make Conctrol Lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

FileVersion=1,0,0,0//如果创建Active Form时没有选择Make Conctrol Lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在这个.INF文件的[version]部分有两句代码。signature="$CHICAGO$"表示这个.INF文件和Windows95或其后版 本和Windows NT 4.0或其后的版本兼容。AdvancedINF=2.0表示Advpack.dll的版本,IE 4.0或其后版本必须导入这个文件去解析这个.INF文件。在这里要求的版本是2.0。

至于[Add.Code]部分,其中列出了在一个.CAB文件中需要下载的文件,并把这些文件的详细信息映射到其后对应的各个部分。比如[CustForm.ocx]部分中的信息就是下载CustForm.ocx这个文件的相关信息。

在[CustForm.ocx]部分的第一句代码告诉IE,CustForm.ocx文件就包含在这个.CAB文件中。第二行注明了这个控件的CLSID 号。第三行是控件的版本号。第四行告诉IE需要使用前面的CLSID号来注册这个控件。[CustForm.lic]部分就不多讲了。

2. 创建.CAB文件

在命令行中输入以下代码把CustForm.ocx、CustForm.inf和CustForm.lic这三个文件添加到一个.CAB文件中,这个文件取名为CustForm.cab:

cabarc.exe -s 6144 N CustForm.cab CustForm.ocx CustForm.inf CustForm.lic

3. 创建证书文件

在命令行输入以下命令:

makecert -sv CustForm.pvk -r -n "CN=SunStar" CustForm.cer

4. 转换证书:

cert2spc CustForm.cer CustForm.spc

5. 创建另外一个自签名证书,叫test.cer

在命令行中依次输入以下两条命令:

makecert -sv test.pvk -r -n "CN=SunStar" test.cer

cert2spc test.cer test.spc

6. 从test.cer创建test.ctl文件

makectl test.cer test.ctl

7. 用CustForm.pvk和CustForm.spc这两个文件给test.ctl作数字签名

signcode -v CustForm.pvk -spc CustForm.spc test.ctl

8. 把test.ctl移动到受信系统存储区

certmgr -add -ctl test.ctl -s trust

9. 把CustForm.cer移动到根系统存储区

certmgr -add -c GMTestX.cer -s root

10. 用test.pvk和test.spc给CustForm.cab作数字签名

singcode -v test.pvk -spc test.spc CustForm.cab

11. 检查文件是否通过验证

chktrust CustForm.cab

如果文件通过了数字签名检测,系统会询问是否安装这个文件,这时候一定要选择安装,整个签名过程才能完成。

执行以上步骤的过程中,有时候需要用户输入密码。用户可以任意选择一个密码,比如12345。

接下来,我们把一个调用Delphi的Web Deploy命令产生的文件CustForm.htm复制到C:InetpubwwwrootOurHTML文件夹中,并修改其内容如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

<HTML>

<H1> 群组配置 </H1><p>

<HR><center><P>

<OBJECT

id =CustForm

classid="clsid:7E302B32-912F-427B-98D0-03AB15716E81"

codebase="/OurCAB/CustFormX.cab#version=1,0,0,0"

width=100%

height=80%

align=center

hspace=0

vspace=0

<param name=Invaild value=Invaild>

<param name=wsroot value=http://192.168.0.56:8080/adms/services/> <!--value={TMPL,OUTPUT,COND}-->

>

</OBJECT>

</HTML>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

再将签名的CustForm.cab文件移动到C:InetpubwwwrootOurCAB文件夹中。

好了,现在打开IE,在地址栏中输入:http://localhost/OurHTML/CustForm.htm后,IE询问是否下载这个控件,我们选择是,就可以看到我们的ActiveX控件的窗体了。大功告成!

三:将下面语句包含在build.bat中

makecab HqForm.ocx ocxHqForm.cab

来自: http://hi.baidu.com/xzmyzy/blog/item/f964ebdbc73a786cd1164ee5.html

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/92313.html

更多阅读

windows7 设置文件夹的权限设置 windows文件夹权限

windows7 设置文件夹的权限设置——简介有些重要的文件,不希望别人删除或者修改。可以给文件夹设置权限,以保护文件,下面介绍一下windows 7系统文件夹权限的设置。步骤如下:windows7 设置文件夹的权限设置——方法/步骤windows7 设置文

win7新建文件夹的快捷键 xp新建文件夹的快捷键

任何的操作系统、软件、游戏,只有熟练使用快捷键,才能最大效率的工作、娱乐,我们不能把所有的时间都浪费在一台机器上,这是不行的。快捷键带给我们的不只是快速,还能感受到机器带来的快感。新建文件夹的快捷键C

如何更改电脑桌面上文件夹的图标 怎样更改电脑桌面图标

如何更改电脑桌面上文件夹的图标——简介有时候,我们新建一个文件夹,感觉比较单调,想弄的好看一些,换个图标,却不知道该怎么去做,接下来,就告诉大家一个快速的方法。如何更改电脑桌面上文件夹的图标——方法/步骤如何更改电脑桌面上文件夹

怎么更改文件夹的图标(自定义文件夹图标) 自定义文件夹图标

怎么更改文件夹的图标(自定义文件夹图标)——简介打开电脑,我们看到的文件夹都是同一种图标,也许我们会觉得没有美感,没个性!要是能够更改成自己喜欢的图标就好了,那样的话,看起来就爽多了!那么怎么样才能更改成自己喜欢的图标呢?下面小编

声明:《cab文件打包的ActiveX控件 activex控件 cab》为网友害你笑分享!如侵犯到您的合法权益请联系我们删除