OCX:OCX稱為對象類別擴充組件(Object Linking and Embedding (OLE) Control eXtension); CAB:壓縮包文件,。存儲多個壓縮文件的單個壓縮包文件,。這些文件通常用于軟件安裝,還用來減小文件大小和縮短 Web 內(nèi)容的相關(guān)下載時間,。
打包步驟制作CAB文件時需要將所有的相關(guān)文件都包含進去,,一般需要將OCX做CAB打包即為ocx的開發(fā)者本人明確知道所依賴的動態(tài)鏈接庫,如果不了解OCX依賴于那些動態(tài)鏈接庫,,可以通過Depends(VC自帶的)檢查需要的文件,,然后使用inf文件將這些東西都寫進去。 (1)制作inf文件在此處不對INF文件本身的格式做額外說明,,如有興趣可自行上網(wǎng)搜索,。 此OCX控件CAB打包的INF文件如下書寫,首先此控件不僅僅只有一個ocx文件,,還具備其它的動態(tài)鏈接庫,,同時還有ini配置文件: [version] signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] CCEA.ocx=CCEA.ocx DesktopAgent.dll=DesktopAgent.dll ProxySock.dll=ProxySock.dll Web2Agent.dll=Web2Agent.dll Config.ini=Config.ini [CCEA.ocx] file-win32-x86=thiscab clsid={6F82C754-6C31-43EA-9818-E95AD4E872FC} FileVersion=1,6,0,44 RegisterServer=yes DestDir=10 [DesktopAgent.dll] file-win32-x86=thiscab FileVersion=1,6,2,27 DestDir=10 [ProxySock.dll] file-win32-x86=thiscab FileVersion=1,6,0,1 DestDir=10 [Web2Agent.dll] file-win32-x86=thiscab FileVersion=1,0,0,0 DestDir=10 [Config.ini] file-win32-x86=thiscab FileVersion=1,0,0,2 DestDir=10
下面對以上INF文件的內(nèi)容做詳細說明: [Version]區(qū)的內(nèi)容可以不考慮,接下來就是最重要的[Add.Code]區(qū),,格式為XXXX=XXXX,;前面是要下載的文件名,后面是對應這個文件的區(qū)域名,,可以是任何名字,,不過一般都是和文件的名字相同,這樣方便維護,。 再接下來是各個文件的區(qū)域,,[XXX]其中XXX為[Add.Code]區(qū)中的文件名,其中[CCEA.ocx]文件區(qū)域的參數(shù)比其它文件多,,這是因為其為此CAB的核心,,其它文件均依賴于它且它需要自動注冊,首先來講解[CCEA.ocx]部分: (1)file-win32-x86=thiscab 這個值告訴ie到哪里去得到這個ocx,,,,file一共包括三個部分,第一部分是file,,這個永遠都是這樣的,;第二部分告訴聲明支持的OS,win32表示windows,,mac就是蘋果MAC OX了,;第三部分是CPU類型,,比如說x86、mips等,。 file的值可以取三個:一個URL,、ignore和thiscab,如果是URL則說明到URL所在的位置去下,;如果是ignore說明對于這種OS和CPU,,不需要下載這個文件;如果是thiscab就在當前的cab文件中了,; (2)clsid={6F82C754-6C31-43EA-9818-E95AD4E872FC} 此處需要填寫該ocx的class guid,; (3)RegisterServer=yes 此處可以取兩個值yes和no,如果為yes則說明ie要注冊該ocx,,如果是no就不必注冊,; (4)DestDir=10 此處的值是ocx將要存到本地硬盤的位置,如果它的值是10,,則將ocx放到\Windows或者\WinNT下,;如果是11,則放到\Windows\System或者\WinNT\System32下,;如果是空(就是沒有值)則會放到\Windows或者\WinNT下的Downloaded Program Files目錄下,;此處選為10是放在\Windows是考慮\Windows下文件量小易于操作便于卸載; (5)FileVersion=1,6,0,44 此處說明了ocx的版本號,,目前ocx版本號為1.6.0.44,此處也是CAB自動升級的判斷依據(jù),,其它文件區(qū)域內(nèi)容標識與[CCEA.ocx]部分,,此處不再贅敘。 (2)制作CAB文件在此之前你需要實現(xiàn)ActiveX控件安全的初始化和腳本,,相關(guān)信息可以查閱ActiveX控件實現(xiàn)安全的初始化和腳本利用iexpress.exe(windows提供的一個向?qū)絚ab制作工具)進行打包,,進入CMD鍵入iexpress回車即顯示如下界面: 選“Create new Self Extraction Directive file”,點“下一步”,,出現(xiàn)如下框: 選擇“Create compressed files only(ActiveX Installs)”,,點擊下一步,出現(xiàn)如下框圖,,點擊Add,,添加INF中標注的所有文件: 點擊下一步,點擊Browse,,選擇CCEA.CAB文件的存放地址并命名CAB文件名,,此文件名在IE加載時html標簽時使用,并且要選中“Store files using Long File Name inside Package“: 點擊下一步: 此處選擇“Don’t save”,,一直點擊下一步,,直到完成,,最后在前面選擇的位置會出現(xiàn)以前面所取名字一致的CAB文件: 至此CAB的打包工作已經(jīng)完成。
CAB增加數(shù)字簽名此處不做說明,,可以申請測試證書供測試,,也可以自己寫證書,只不過根證書需要重新安裝,,如果是商業(yè)化應用的話還是購買微軟認證機構(gòu)的代碼簽名,,這樣不需要額外的操作即可正常使用增加簽名的CAB文件,只在第一次使用時安裝部署后續(xù)的再次使用沒有任何提示報警即可加載,,一般購買機構(gòu)會提供簽名的工具,,可能是批處理工具也可能給相應文檔,最終使用的還是signtool.exe簽名工具,。
CAB升級方式
OCX及依賴DLL升級如果CAB文件中ocx機器附屬dll文件需要更新,,那么只可能是版本更新,要么是ocx版本升級要么是dll文件版本升級,,無論哪一種形式ocx的版本號均需要都是需要通過正常的發(fā)布流程發(fā)布,,所以這兩種形式可視為一致。 此時需要升級CAB打包過程中INF文件中相應的文件區(qū)域中的版本號與有更新的文件的文件版本號保持一致,,比如此時ocx和DeskAgent.dll有更新,,此時新發(fā)布的版本中版本號分別分別更新為1.6.0.45和1.6.2.28,INF文件中相應區(qū)域應修改為: [CCEA.ocx] file-win32-x86=thiscab clsid={6F82C754-6C31-43EA-9818-E95AD4E872FC} FileVersion=1,6,0,45 RegisterServer=yes DestDir=10
[DesktopAgent.dll] file-win32-x86=thiscab FileVersion=1,6,2,28 DestDir=10
重新打包簽名替換原本用來分發(fā)的舊CAB包,,同時在html標簽中CAB的版本號要升級為與CAB文件中OCX文件的版本號一致,。 以上是一種標準的升級方式有助于在每次升級過程中明確相應的版本關(guān)系而不至于在多次升級之后版本號的混亂,同時能夠保證簽名之后的CAB文件在安裝之后即可正常使用不再有下載安裝的步驟,,但實際上只要升級了OCX的版本號并且將html里的版本號一并升級之后無論其它依賴的文件是否更新,、版本號是否升級,所有文件均重新下載安裝注冊替換為新CAB文件中的文件,,這點是需要強調(diào)注意的(至于html標簽怎么寫后面會有說明),。 只更新INI配置文件目前沒有找到有效的方法在不更新OCX文件及其附屬dll的前提下自動更新,目前的建議的方法是將更換了新的ini配置文件后重新打包CAB并簽名,,不更改INF文件的前提條件下更新html中標簽的版本,,更新完之后所有坐席均保證做一次業(yè)務(wù)系統(tǒng)登錄以更新CAB文件,之后再將html標簽中的版本改回原先的版本號,,此舉是保證坐席之后每次登錄均不再需要重新下載安裝即可直接使用,,保證良好的適用性。
CAB加載的HTML實現(xiàn)原先第三方業(yè)務(wù)系統(tǒng)使用OCX控件需要在業(yè)務(wù)系統(tǒng)的html實現(xiàn)如下代碼: <OBJECT id="UsbossViewer" name="objocx" classid="clsid:6F82C754-6C31-43EA-9818-E95AD4E872FC" width="100%" height="250"> </OBJECT>
若要在OCX文件直接加載時初始化屬性,,需要在OBJECT標簽之內(nèi)初始化屬性,,具體結(jié)構(gòu)變?yōu)槿缦陆Y(jié)構(gòu): <OBJECT id="UsbossViewer" name="objocx" classid="clsid:6F82C754-6C31-43EA-9818-E95AD4E872FC" width="100%" height="250"> <PARAM NAME="XXXX" VALUE="XXXX"/> </OBJECT>
下面講述第三方業(yè)務(wù)系統(tǒng)在html標簽中如何使用CAB文件,html標簽實例如下: <OBJECT ID= "UsbossViewer " name="objocx" CLASSID= "CLSID:6F82C754-6C31-43EA-9818- E95AD4E872FC" CODEBASE= "CCEAOCX.CAB#version=1,6,0,44" width="100%" height="250"> </OBJECT>
此處"objocx"可任意命名,,在之后使用控件的接口或者屬性則以objocx. 方法名或者objocx. 屬性即可,,“CODEBASE=”是一個比較重要的key,,其中CCEAOCX.CAB是CAB文件打包時的命名,而之后1,6,0,44則是此CAB的版本號,,但是CAB本身是沒有版本號的,,因此一般來說將此版本號設(shè)置得與CAB文件中ocx的版本號一致,這也是建議的一種方式,,在更新CAB文件中有相當大的作用,。 若要像OCX文件直接加載時初始化屬性,其方式是一樣的,,同樣在OBJECT標簽之內(nèi)初始化屬性: <OBJECT ID= "UsbossViewer " name="objocx" CLASSID= "CLSID:6F82C754-6C31-43EA-9818- E95AD4E872FC" CODEBASE= "CCEAOCX.CAB#version=1,6,0,44" width="100%" height="250"> <PARAM NAME="XXXX" VALUE="XXXX"/> </OBJECT> 使用URL的CAB部署方式CAB文件的使用描述的CAB部署方式是必須在加載頁面的的本級目錄下部署CAB文件,,若要指定路徑的話其格式應該是: <OBJECT ID= "UsbossViewer " name="objocx" CLASSID= "CLSID:6F82C754-6C31-43EA-9818- E95AD4E872FC" CODEBASE= "http://10.130.40.220:9081/CAB/OCXold.CAB#version=1,6,0,44" width="100%" height="250"> </OBJECT>
其中http://10.130.40.220:9081/CAB/OCXold.CAB即為CAB放置的絕對路徑,http://10.130.40.220:9081/CAB/為測試環(huán)境的路徑,。 |
|