天天看點

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所示的工具集,則表示已下載下傳成功:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

2、設定系統環境變量,右鍵單擊“我的電腦”à選擇“屬性”à選擇“進階”頁籤,打開如圖2所示的系統屬性面版塊:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

3、在系統屬性版塊裡單擊“環境變量(N)”按鈕,打開圖3:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

4、選擇“系統變量(S)”裡的“建立(W)”按鈕,打開“編輯系統變量”對話框,如圖4所示,然後在“變量值(V)”裡加入“;E/makeCAB”:

二、将用于打包的OCX控件放在E盤根目錄下(本文檔使用名為evS1300.ocx的控件來進行介紹),如圖5所示,其中evS1300.ocx是本文檔進行操作的控件對象,而mfc71.dll、msvcp71.dll、msvcr71.dll這三個檔案通常是進行打包時一并打包的檔案,但不是必須(推薦一起打包),其可在系統中的system32目錄下找到,請自行準備。

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

三、ActiveX釋出步驟

1、單擊“開始”à“動行(R)”à輸入“cmd”à回車à進入到操作的控件所在的目錄,如圖6所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

2、建立PVK檔案(私人密匙檔案),在指令行中輸入“makecert -sk evS1300 evS1300.pvk -n CN=XXXXXXX公司”,然後回車,如圖7所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

3、建立CER檔案(公司證書),在指令行中輸入“makecert -sk evS1300.pvk evS1300.cer”,然後回車,如圖8所示,若出現“Successed”提示,則會在E:/evS1300目錄下生成evS1300.cer檔案,如圖9所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝
ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

4、建立SPC測試軟體出版商證明書,在指令行中輸入“cert2spc evS1300.cer evS1300.spc”,然後回車,如圖10所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

5、建立INF檔案,用記錄本編輯以下資訊

[version]

signature="$CHINA$"

AdvancedINF=1.0

[Add.Code]

evS1300.ocx=evS1300.ocx

msvcr71.dll=msvcr71.dll

mfc71.dll=mfc71.dll

msvcp71.dll=msvcp71.dll

[evS1300.ocx]

file=thiscab

clsid={0440906E-9BD6-4F3E-B65A-39E1B339D9DA}

FileVersion=1,0,0,0

RegisterServer=yes

[msvcr71.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=7,10,3052,4

[mfc71.dll]

FileVersion=7,10,3077,0

[msvcp71.dll]

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝
ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

在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所示的界面:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

在圖13的界面裡,點選“File”à“Open…”,打開您所要檢視的OCX控件,如圖14所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

打開了控件之後,我們在界面的右邊部位“Class”的下拉框裡選擇“”就可以看到我們想要查找的FileVersion和classId,如圖15所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

6、建立CAB檔案,在指令行中輸入“cabarc -s 6144 n evS1300.cab msvcr71.dll mfc71.dll msvcp71.dll evS1300.ocx evS1300.inf”,然後回車,如圖16所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

7、使用Code Signing Wizard簽署一個CAB檔案,首先輕按兩下運作工具集裡面的signcode.exe(或在指令行裡直接輸入“signcode”後回車),系統會彈出如圖17所示的數字簽名向導:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

8、單擊“下一步(N)”按鈕,來到圖18所示,選擇要進行數字簽名的且已做成CAB包的檔案evS1300.cab檔案。

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

9、選擇好CAB包後單擊“下一步(N)”按鈕,在選擇想要的簽名類型裡選擇“自定議(C)”并單擊“下一步(N)”按鈕,如圖19所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

10、接下來單擊“從檔案選擇(F)”按鈕,選擇剛剛制作的evS1300.cer,如圖20所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

11、在圖20中單擊“下一步(N)”按鈕來到圖21,然後在圖21裡選擇“CSP中的私鑰(K)”。

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

12、在圖21中單擊“下一步(N)”按鈕,然後在圖22中的雜湊演算法中選擇“shal”,并單擊“下一步(N)”按鈕。

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

13、在“證書路徑中的證書”中選擇“證書路徑中的所有證書,包括根證書(C)”,在“其它證書(可選)”中選擇“包括在以下PKCS #7 證書(.p7b)檔案中的證書(P):”,并單擊“浏覽(R)…”按鈕選擇evS1300.spc檔案,選擇完後單擊“下一步(N)”按鈕,如圖23所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

14、接下來在彈出的“資料描述”視窗中輸入公司的名稱和網址并單擊“下一步(N)”按鈕,如圖24所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

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

(這裡我提拱三個免費的代碼簽名時間戳位址)

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

16、完成,在圖25中單擊“下一步(N)”按鈕便可來到數字簽名向導的最後一步,即操作總覽,如圖26所示,單擊“完成”按鈕便可大功告成,如圖27所示:

ActiveX控件打包成Cab置于網頁中自動下載下傳安裝
ActiveX控件打包成Cab置于網頁中自動下載下傳安裝

繼續閱讀