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 是管理證書用的。

<o:p> </o:p>

二、用於進行打包用的ocx控件evS1300.ocx。

三、用於查看ocx控件的工具ActvxDoc。

 

[製作過程]

一、環境設置

1、下載makeCAB包,解壓到本地目錄(如E盤根目錄),如查看到如圖1所示的工具集,則表示已下載成功:

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>

   2、設置系統環境變量,右鍵單擊“我的電腦”à選擇“屬性”à選擇“高級”選項卡,打開如圖2所示的系統屬性面版塊:

 

 

(圖2:系統屬性版塊)

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

 

 

(圖3:系統變量)

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

 

 

(圖4:編輯系統變量)

<o:p></o:p>

<o:p> </o:p>

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

 

 

(圖5;用於操作的OCX控件路徑)

<o:p> </o:p>

三、ActiveX發佈步驟

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

 

 

(圖6:進入E:"evS1300目錄)

 

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

 

(圖7:創建PVK文件)

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

<v:shape id="_x0000_i1037" style="WIDTH: 414.75pt; HEIGHT: 271.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"03"clip_image015.png"></v:imagedata></v:shape>

(圖8:創建CER文件)

<o:p> </o:p>

<v:shape id="_x0000_i1038" style="WIDTH: 415.5pt; HEIGHT: 279pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"03"clip_image017.png"></v:imagedata></v:shape>

(圖9:生成evS1300.cer)

<o:p></o:p>

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

 

 

(圖10:創建SPC測試軟件出版商證明書)

<o:p></o:p>

       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  

     如圖11所示,並保存爲E:"evS1300"evS1300.inf,如圖12所示

 

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 415.5pt; HEIGHT: 328.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image001.png"></v:imagedata></v:shape>

(圖11:evS1300.inf)

<o:p> </o:p>

 

(圖12:保存evS1300.inf)

       在evS1300.inf的內容裏,[version][Add.Code]項是必須的,[Add.Code]的鍵值項的多少取決於以下你所配製項的多少。[msvcr71.dll][mfc71.dll][msvcp71.dll]就是上面我所說不是必須的項,只要你想把msvcr71.dllmfc71.dllmsvcp71.dll包括在發佈包裏,那這麼三項就必須寫在inf裏,而這三項的具體內容是固定的,可複製過去即可。最爲關鍵的就是[evS1300.ocx]項,其中有clsidFileVersion就是evS1300.ocxclassIdversion,這要求必須一至,否我們發佈出去的CAB包時不能在客戶端自動更新下載安裝。說到這裏,那我們如何才能知道evS1300.ocx裏面的classIdversion呢?我在上面的必備條件裏介紹到有一個用於查看ocx控件的工具ActvxDoc,對,就是用它,我們雙擊這個文件運行它,此時可以看到圖13所示的界面:<o:p></o:p>

 

 

(圖13:ActiveX Documenter)

在圖13的界面裏,點擊“File”à“Open…”,打開您所要查看的OCX控件,如圖14所示:

 

 

(圖14:打開控件)

打開了控件之後,我們在界面的右邊部位“Class”的下拉框裏選擇“<all interfaces=""></all>”就可以看到我們想要查找的FileVersionclassId,如圖15所示:

 

 

(圖15:控件屬性)

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

<o:p> </o:p>

<o:p> </o:p>

 

 

(圖16:創建CAB文件)

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

 

 

(圖17:數字簽名嚮導)

 

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

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1027" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image001.png"></v:imagedata></v:shape>

(圖18:選擇CAB包)

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

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1027" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image001.png"></v:imagedata></v:shape>

(圖19:選擇簽名類型)

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

<o:p> </o:p>

<v:shape id="_x0000_i1028" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image003.png"></v:imagedata></v:shape>

(圖20:選擇CER證書)

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

<v:shape id="_x0000_i1029" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"></v:shape>

(圖21:選擇私鑰的位置)

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

<v:shape id="_x0000_i1030" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image007.png"></v:imagedata></v:shape>

(圖22:選擇散列算法)

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

<v:shape id="_x0000_i1031" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image009.png"></v:imagedata></v:shape>

(圖23:選擇其它證書)

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

<v:shape id="_x0000_i1032" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image011.png"></v:imagedata></v:shape>

(圖24:輸入數據描述)

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

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

VeriSign: http://timestamp.verisign.com/scripts/timstamp.dll

Comodo: http://timestamp.comodoca.com/authenticode

GeoTrust/TrustCenter: http://www.trustcenter.de/codesigning/timestamp

<o:p> </o:p>

<v:shape id="_x0000_i1033" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image013.png"></v:imagedata></v:shape>

(圖25:給數據蓋時間戳)

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

<v:shape id="_x0000_i1025" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"></v:shape>

(圖26,完成操作總覽)

<o:p> </o:p>

<v:shape id="_x0000_i1026" style="WIDTH: 164.25pt; HEIGHT: 90.75pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:"DOCUME~1"HUANGZ~1"LOCALS~1"Temp"msohtml1"01"clip_image017.png"></v:imagedata></v:shape>

(圖27:簽名成功提示)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章