ActiveX控件打包成Cab實現瀏覽器自動下載安裝


前言

  我們在瀏覽器中使用我們自己的一些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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM