前言
我們在瀏覽器中使用我們自己的一些OCX,或者是DLL這一類的文件,在X86的機器上需要我們手動將這些文件拷貝到Windows/System32 文件夾下面去,然后通過Dos命令regsvr32 test.ocx注冊之后才能夠使用。
原來我們一直采用安裝包的方式,就是客戶端需要安裝我們提供的一個exe安裝包,這個exe安裝包的目的就是將一堆如OCX,DLL之類的文件打包 , 並在客戶端安裝的時候將這些文件統統拷貝到Windows/System32文件夾下面去, 然后通過Dos命令regsvr32 test.ocx注冊文件。但是我們使用這樣的方式,會有一個缺陷,就是瀏覽器端必須要安裝我們提供的exe安裝包才能使用系統,否則就不能。
介紹
微軟定義根據微軟權威的軟件開發指南MSDN(Microsoft Developer Network)的定義,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些軟件組件或對象,可以將其插入到WEB網頁或其它應用程序中。
做過ActiveX控件的朋友都知道,使用ActiveX控件,瀏覽器端就可以自動下載ActiveX控件到Windows/System32,並進行注冊。這樣我們既不需要手動拷貝文件,又不需要去安裝什么exe安裝包,還能實現我們想要的功能,這豈不是一舉兩得。
准備工作
要實現ActiveX控件進行自動下載就需要將文件打包成Cab文件,然后瀏覽器去下載Cab文件,然后解壓。
(1)我們需要准備以下文件:
用於將ActiveX控件進行打包並加數據鑒名的工具集,如圖1:
makecert.exe 制作cer格式的證書,即X.509證書,同時可以創建私鑰和公鑰。
cert2spc.exe 將cer格式證書轉換成spc格式證書,即PKCS #7證書。
cabarc.exe 將ocx打包成cab。
signcode.exe 將證書簽署到ocx上去。
chktrust.exe 檢查簽署證書后的ocx是否正確。
certmgr.exe 是管理證書用的。
ActvxDoc.exe 用於查看ocx控件的工具

(圖1)
(2)用於進行打包用的ocx控件XXXX.ocx。
(3)用於進行ocx控件注冊的XXXX.inf。
(4)用於ocx文件所引用的文件如:XXXX.dll , XXXX.lic,XXXX.ico等,如圖2。

(圖2)
步驟
我們現在開始來制作cab文件啦~~~
- 我們先把所有的文件放到E:\browseocx 目錄下面去,如圖3。

(圖3)
- 單擊“開始”->“運行(R)”-> 輸入“cmd” -> 回車 -> 進入到操作的控件所在的目錄,如圖4所示

(圖4)
- 創建PVK文件(私人密匙文件),在命令行中輸入“makecert -sk BrowseOcx BrowseOcx.pvk -n CN=XXXXXXXX”,然后回車,如圖5所示

(圖5)
創建CER文件(公司證書),在命令行中輸入“makecert -sk BrowseOcx.pvk BrowseOcx.cer”,然后回車,如圖6所示,若出現“Successed”提示,則
會在E:\browseocx目錄下生成BrowseOcx.cer文件,如圖7所示

(圖6)

(圖7)
- 創建SPC測試軟件出版商證明書,在命令行中輸入“cert2spc BrowseOcx.cer BrowseOcx.spc”,然后回車,如圖8所示,若出現“Successed”提示,
- 則會在E:\browseocx目錄下生成BrowseOcx. spc文件,如圖9所示

-
(圖8)
(圖9) - 創建INF文件,用記錄本編輯以下信息
-
[version]
signature="$Chicago$"
AdvancedINF=2.0
[Add.Code]
GDIPLUS.DLL=GDIPLUS.DLL
mfc100.dll=mfc100.dll
msvcp100.dll=msvcp100.dll
msvcr100.dll=msvcr100.dll
acemfcd.dll=acemfcd.dll
GoldenClient.dll=GoldenClient.dll
GoldenObjects.dll=GoldenObjects.dll
piapi32.dll=piapi32.dll
RtdbBridge.dll=RtdbBridge.dll
BrowseOcx.ocx=BrowseOcx.ocx
BrowseOcx.lic=BrowseOcx.lic
BrowseOCX.ico=BrowseOCX.ico
[GDIPLUS.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=6,0,3260,0
[mfc100.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=10,0,40219,1
[msvcp100.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=10,0,40219,1
[msvcr100.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=10,0,40219,1
[acemfcd.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=5,4,1,0
[GoldenClient.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,3,11
[GoldenObjects.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,3,11
[piapi32.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,6,1,10
[RtdbBridge.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,0,0
[BrowseOcx.ocx]
file-win32-x86=thiscab
clsid={F6157CB2-D9CD-4780-B3BF-C1EF13D48446}
RegisterServer=yes
DestDir=11
FileVersion=2,0,1,0
[BrowseOcx.lic]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
[BrowseOCX.ico]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
(圖10)
(圖11)
在BrowseOcx.inf的內容里,[version]和[Add.Code]項是必須的,[Add.Code]的鍵值項的多少取決於以下你所配制項的多少。
[mfc100.dll]、[msvcp100.dll]就是上面我所說不是必須的項,只要你想把mfc100.dll、msvcp100.dll包括在發布包里,那這么兩項就必
須寫在inf里,而這三項的具體內容是固定的,可復制過去即可。最為關鍵的就是[BrowseOcx.ocx]項,其中有clsid和FileVersion就
是BrowseOcx.ocx的classId和version,這要求必須一至,否我們發布出去的CAB包時不能在客戶端自動更新下載安裝。說到這里,那我們如
何才能知道BrowseOcx.ocx里面的classId和version呢?我在上面的必備條件里介紹到有一個用於查看ocx控件的工具ActvxDoc,對,就是用
它,我們雙擊這個文件運行它,win7下可能不能運行。
創建CAB文件,在命令行中輸入“cabarc -s 6144 n BrowseOcx.cab GDIPLUS.DLL mfc100.dll msvcp100.dll msvcr100.d
ll acemfcd.dll GoldenClient.dll GoldenObjects.dll piapi32.dll RtdbBridge.dll BrowseOcx.lic BrowseOCX.ico BrowseOc
x.ocx BrowseOcx.inf”,然后回車,如圖12所示:

(圖12)
使用Code Signing Wizard簽署一個CAB文件,首先雙擊運行工具集里面的signcode.exe(或在命令行里直接輸入“signcode”后回
車),系統會彈出如圖13所示的數字簽名向導:

(圖13)
單擊“下一步(N)”按鈕,來到圖14所示,選擇要進行數字簽名的且已做成CAB包的文件BrowseOcx.cab文件。

(圖14)
選擇好CAB包后單擊“下一步(N)”按鈕,在選擇想要的簽名類型里選擇“自定議(C)”並單擊“下一步(N)”按鈕,如
圖15所示。

(圖15)
接下來單擊“從文件選擇(F)”按鈕,選擇剛剛制作的BrowseOcx.cer,如圖16所示:

(圖16)
在圖16中單擊“下一步(N)”按鈕來到圖17,然后在圖17里選擇“CSP中的私鑰(K)”

(圖17)
在圖17中單擊“下一步(N)”按鈕,然后在圖18中的散列算法中選擇“shal”,並單擊“下一步(N)”按鈕

(圖18)
在“證書路徑中的證書”中選擇“證書路徑中的所有證書,包括根證書(C)”,在“其它證書(可選)”中選擇“包括在以
下PKCS #7 證書(.p7b)文件中的證書(P):”,並單擊“瀏覽(R)…”按鈕選擇BrowseOcx.spc文件,選擇完后
單擊“下一步(N)”按鈕,如圖19所示:

(圖19)
接下來在彈出的“數據描述”窗口中輸入公司的名稱和網址並單擊“下一步(N)”按鈕,如圖20所示(這的描述,必
須要和先前第三部制作PVK的描述一致)

(圖20)
現大部份工作都已完成,在接下來的一步當中是可選的操作,其作用只是為CAB加入時間戳,此步驟完全可以不做,如
圖21所示:

(圖21)
完成

(圖22)
這個時候我們已經完成制作cab包
在服務器上的html中加入OBJECT標簽:
瀏覽器有的時候可能會禁用掉ActiveX控件,我們需要主動設置瀏覽器選項。
注意:打開IE瀏覽器工具Internet選項安全自定義級別啟用所有ActiveX控件
如:
<OBJECT id="Chart" codeBase="./Download/CfxIEAx.cab#Version=5,5,3,0" type="application/x-oleobject" heigh
t="910" width="1870" classid="CLSID:21F49842-BFA9-11d2-A89C-00104B62BDDA" VIEWASTEXT>
<PARAM NAME="LICENSE" VALUE="./License/CfxIE.lic" />
</OBJECT>
