Web發佈cab文件打包的ActiveX控件總結[轉]

 
Web發佈cab文件打包的ActiveX控件總結[轉]
2007年04月13日 星期五 下午 05:16
這兩天做控件的web發佈遇到了幾個問題,現總結如下。
一、程序描述:
程序環境:windows Xp sp2, ie 6, tomcat 5.5, vc++6.0
程序過程:控件做成ocx文件,用於客戶端調用本地硬件,其中有用到第三方几個.dll文件。採用windows自帶iexpress.exe 打包成cab文件,在服務器端jsp頁面進行控件調用,下載cab文件並自動註冊。
二、程序問題:
遇到問題:
1.       cab文件無法下載,而且根本不加提示。
2.       下載好的cab文件在system32中能夠看到,但是頁面仍然不能顯示,一把紅叉,並且無法使用。
問題測試:
1.       瀏覽器頁面根本沒有下載提示,考慮應該是cab的路徑問題,也曾考慮是ie瀏覽器的安全問題。將安全降到最低測試。反覆更改cab路徑。
2.       這個問題最鬱悶,搞了很久。考慮首先是安全問題,然後在網上搜索之後說是sp2調高了安全策略,有說降低安全,有說需要對程序進行數字簽名。
問題解決:
1.       確實是路徑不對,與安全無關。當在jsp中代碼爲:
<OBJECT id=pos codebase="TestCAB.CAB#version=1,0,0,1" height=100 width=100 classid="CLSID:719A1D6E-7099-4123-9D63-F0118AFF2D61" VIEWASTEXT></OBJECT>
TestCAB.CAB文件應該放置在tomcat5.5安裝目錄Tomcat 5.5/webapps下該調用jsp所在的工程下。
2.       不需要更改安全級別,而應該在Internet選項-〉安全-〉受信任的站點-〉站點 中添加服務器地址。注意:不要選複選框“對該區域中的所有站點要求服務器驗證”。
三、總結:
1. 將ocx文件以及第三方dll文件打包成cab文件:
Internet軟件分發單位是“軟件包”,它由包含.INF文件或軟件分發.OSD文件(或兩者都包括)的.CAB文件所組成。一個分發單位也可以包含軟件組件,如 ActiveX 控件(.OCX)、.DLL文件、.EXE文件、Java類文件或小程序。當Web頁上OBJECT元素的CODEBASE特性引用包含.INF文件的.CAB文件時,Internet Explorer將自動把.CAB文件作爲軟件分發單位下載並安裝,每次訪問時還會自動檢測版本並進行更新。
INF文件是一個文本文件,指定運行控件所需要下載或者呈交的文件(比如.DLL或者其它.OCX)。一個.INF文件就捆綁了.CAB壓縮文件所有的必須文件。 缺省情況下,與現有硬盤中文件版本號相同的文件不被下載。
先自己寫了一個inf文件,其中信息包括將.ocx文件,以及相關的.dll文件打包,並下載到文件夾:/WINDOWS/system32,詳細標註如下:
[version]     
signature="$CHICAGO$"
AdvancedINF=2.0
 
[DefaultInstall]     
CopyFiles=install.files
RegisterOCXs=RegisterFiles
 
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
 
[DestinationDirs]
install.files=11
[SourceDisksNames]     
1=%DiskName%,TestCAB.CAB,1
 
[Add.Code]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll
pcpos.dll=pcpos.dll
TCPCLNT.dll=TCPCLNT.dll
 
[install.files]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll
pcpos.dll=pcpos.dll
TCPCLNT.dll=TCPCLNT.dll
 
[SourceDisksFiles]
pcpos.ocx=1
Comm.dll=1
pcpos.dll=1
TCPCLNT.dll=1
 
[pcpos.ocx]
file-win32-x86=thiscab     
RegisterServer=yes     
clsid={719A1D6E-7099-4123-9D63-F0118AFF2D61}     
DestDir=11     
FileVersion=1,0,0,1
 
[Comm.dll]
file-win32-x86=thiscab     
RegisterServer=yes                          
DestDir=11     
FileVersion=1,0,0,1
 
[pcpos.dll]
file-win32-x86=thiscab     
RegisterServer=yes       
DestDir=11     
FileVersion=1,0,0,1
 
[TCPCLNT.dll]
file-win32-x86=thiscab     
RegisterServer=yes       
DestDir=11     
FileVersion=1,0,0,1
 
[RegisterFiles]     
%11%/pcpos.ocx
註釋:
"thiscab" 是一個關鍵字,意指包含該INF的CAB文件。也可以從網上下載所需要的DLL文件,只要指定一個HTTP 網址即可,如:
file-win32-x86=http://www.mysite.com/mydir/NEEDED.DLL
關鍵字"file-win32-x86" 指定平臺是 x86。
文件版本號可見屬性。
"DestDir"指的是裝載目錄或者文件的地址: 11 指定爲系統目錄 WINDOWS/ /SYSTEM32;
"clsid" 指的是要安裝控件的CLSID。
製作cab:
使用/WINDOWS/system32/iexpress.exe。
1)        選擇“Create new Self Extraction Directive file”,點擊下一步。
2)        選擇“Create compressed files only(ActiveX Installs)”,點擊下一步。
3)        點擊Add,文件添加(pcpos.ocx,pcpos.dll,comm.dll,tcpclnt.dll),點擊下一步。
4)        點擊Browse,輸入.CAB文件的存放地址(包含所取文件名),這裏取TestCAB.CAB,並且要選中 “Store files using Long File Name inside Package”。點擊下一步。
5)        選擇“Don’t save”,一直點擊下一步,直到完成。
注意:
如果控件已經在客戶機註冊,並且不是通過.CAB的方式註冊,那麼通過.CAB自動註冊的時候,該控件將無法被更新。必須先手動刪除該文件。
2. 對CAB文件進行數字簽名
傳說中數字簽名之後就可以不出現提示而自動下載,所以也試試:
在/Microsoft Visual Studio .NET 2003/SDK/v1.1/Bin 中間有三個小工具(可單獨將他們拷貝出來),就用他們來實現數字簽名。
1.Makecert.exe ---證書創建工具
2.Cert2Spc.exe ---發行者證書測試工具
3.Signcode.exe ---文件簽名工具
對CAB文件進行數字簽名詳細講解教程及工具下載
步驟:
1)        makecert -ss name -n "CN=公司名" -sv d:/pos.pvk -r d:/pos.cer 其中sk-表示主題的密鑰容器位置,ss-主題的證書存儲名稱, n-證書頒發對象,r-證書存儲位置,-sv 導出私鑰文件(爲了簽名使用)。注意:這個時候會讓輸入三次密碼,三次要完全一致。
2)        使用Cert2Spc生成spc發行者證書(可選):cert2spc d:/pos.cer c:/pos.spc
3)        雙擊signcode,不帶參數會啓動簽名嚮導。先選擇要簽名文件,下一步,選擇“自定義”,下一步,選擇“從文件選擇”,添加剛生成的pos.cer證書,下一步,選擇剛生成的私鑰pos.pvk,再下一步,可spc證書,再一直下一步。添加時間戳,在時間戳填入http: //timestamp.verisign.com/scripts/timstamp.dll TestCAB.CAB,再下一步完成。
這樣就對CAB文件進行了簽名,但是這個時候點擊這個文件會發現證書不可用,原因是證書沒有安轉。文件屬性->數字證書->詳細信息-〉查看證書-〉安裝證書,進入安裝證書嚮導,存放區域選擇“受信任的根證書頒發機構”,點擊完成即可。
在客戶端測試:
1)        加入證書,瀏覽器-〉工具-〉Internet選項-〉內容-〉證書-〉受信任的頒發機構-〉導入證書。
2)        在有證書的情況下,如果服務器沒有加入“可信任網址”,提示下載的時候會顯示證書所籤內容,沒有證書則提示爲“未知”。
3)        如果服務器已加入“可信任網址”,並且已導入證書,則不提示任何信息,在用戶毫無感覺情況下下載。如果沒有加入“可信任網址“,控件可以正常下載但仍然不能正常使用,與是否簽名無關。
四、問題:
1.是否可以不添加“可信任網址”。
2.數字簽名的作用,授權證書與不授權證書的區別。
參考資料:
http://dev.csdn.net/article/82/82401.shtm
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1533803
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章