本文轉自:http://kiki1120.iteye.com/blog/512474
在上一篇文章中,講述瞭如何製作客戶端Activex插件的cab包,但是在使用過程中發現有的瀏覽器不能註冊成功,手動註冊也不行,提示缺少動態鏈接庫的問題,導致不能正常使用。後來重新編譯ocx,將其他dll補充進來一起打包,但仍然不能註冊成功。
於是將所有文件複製到system32文件夾下,手動進行註冊,結果註冊失敗。原來是inf中的寫法將system32作爲目的文件夾,而該文件夾卻不允許這樣操作。至於原因,目前還不清楚,網上搜索到的例子也都是使用system32,可能我的ocx比較特殊吧,那就使用system32下新建的一個目錄吧,這次手動註冊可以成功。
重新打包、測試,有點崩潰了,爲什麼還是註冊不了。現象是瀏覽器提示是否安裝,點擊安裝後無反應,刷新頁面還是提示是否安裝。後來查看支付寶的支付控件中的inf文件,按照其格式重新制作inf文件,再次測試,成功!
如何製作cab包
製作SSL VPN客戶端插件cab包有兩種方法,一種是手動打包,另一種是利用Ant自動打包,下面分別對兩種方法進行說明,你可以根據熟練程度自由選擇。
一、手動打包
準備工作
l 用到的工具
打包工具iexpress.exe
簽名工具signcode.exe
代碼簽名證書
l 打包文件
WVC.ocx
LiteUnzip.dll
mfc80u.dll
mfcm80u.dll
msvcm80.dll
msvcp80.dll
msvcr80.dll
Microsoft.VC80.CRT.manifest
Microsoft.VC80.MFC.manifest
在製作cab包之前,需要準備以上的打包、簽名工具和文件,將iexpress.exe和signcode.exe複製到Java環境變量的bin目錄下。打包文件全部存放在獨立的一個文件夾下。
製作步驟
步驟1 準備inf文件
將以下代碼另存爲wvc.inf,存放於打包文件目錄下。文件內容一般情況下不需要改變,除非cab需要增加或減少文件的情況下,再修改此文件。
- [version]
- signature="$CHICAGO$"
- AdvancedINF=2.0
- [DefaultInstall]
- CopyFiles=files
- RegisterOCXs=RegisterFiles
- [DefaultUninstall]
- cleanup=1
- Delfiles=files
- UnRegisterOCXs=RegisterFiles
- [SourceDisksNames]
- 1 = %DiskName%,"wvc.cab",1
- [SourceDisksFiles]
- WVC.ocx=1
- LiteUnzip.dll=1
- mfc80u.dll=1
- mfcm80u.dll=1
- msvcm80.dll=1
- msvcp80.dll=1
- msvcr80.dll=1
- Microsoft.VC80.CRT.manifest=1
- Microsoft.VC80.MFC.manifest=1
- westone.cer=1
- [RegisterFiles]
- %11%\sslvpn\WVC.ocx
- [DestinationDirs]
- files=11, sslvpn
- [files]
- WVC.ocx=WVC.ocx
- LiteUnzip.dll=LiteUnzip.dll
- mfc80u.dll=mfc80u.dll
- mfcm80u.dll=mfcm80u.dll
- msvcm80.dll=msvcm80.dll
- msvcp80.dll=msvcp80.dll
- msvcr80.dll=msvcr80.dll
- Microsoft.VC80.CRT.manifest
- Microsoft.VC80.MFC.manifest
- westone.cer=westone.cer
- [WVC.ocx]
- file-win32-x86=thiscab
- clsid={C8E6EFFA-ED02-4858-836A-B164102F3C5D}
- RegisterServer=yes
- FileVersion=1,0,0,1
- [LiteUnzip.dll]
- file-win32-x86=thiscab
- FileVersion=0,0,0,2
- [mfc80u.dll]
- file-win32-x86=thiscab
- FileVersion=8,0,50727,42
- [mfcm80u.dll]
- file-win32-x86=thiscab
- FileVersion=8,0,50727,42
- [msvcm80.dll]
- file-win32-x86=thiscab
- FileVersion=8,0,50727,42
- [msvcp80.dll]
- file-win32-x86=thiscab
- FileVersion=8,0,50727,42
- [msvcr80.dll]
- file-win32-x86=thiscab
- FileVersion=8,0,50727,42
- [westone.cer]
- file-win32-x86=thiscab
- [Strings]
- DiskName = "sslvpn"
註釋:
² "thiscab" 是一個關鍵字,意指包含該INF的CAB文件。也可以從網上下載所需要的DLL文件,只要指定一個HTTP 網址即可,如:
² 關鍵字"file-win32-x86" 指定平臺是 x86。
² 文件版本號可見屬性。
² "DestDir"指的是裝載目錄或者文件的地址: 11 指定爲系統目錄 WINDOWS/ /SYSTEM32;
² "clsid" 指的是要安裝控件的CLSID。
步驟2 簽名ocx文件
運行signcode.exe
1) 選擇要簽名的ocx文件,由於dll不需要註冊到系統,所以不必簽名。
2) 選擇代碼簽名證書公鑰。
3) 選擇代碼簽名證書私鑰。
4) 其他選項均爲默認設置,輸入證書私鑰口令,輸入時間戳,再一次輸入私鑰口令。
步驟3 製作CAB
運行iexpress.exe
1) 選擇“Create new Self Extraction Directive file”,點擊下一步。
2) 選擇“Create compressed files only(ActiveX Installs)”,點擊下一步。
3) 點擊Add,選擇所有文件包括inf,點擊下一步。
4) 點擊Browse,輸入.CAB文件的存放地址(包含所取文件名),並且要選中 “Store files using Long File Name inside Package”。點擊下一步。
5) 選擇“Don’t save”,一直點擊下一步,直到完成。
步驟4 簽名CAB
同步驟2,選擇剛剛生成的cab包進行簽名,注意簽名後複製到webapp/download目錄時需要更名爲wvc.cab。
步驟5 刪除ocx插件
如果想刪除已安裝的插件,重新註冊,那麼進入安裝目錄c:\windows\downloaded program files,選中WVC刪除即可。
二、自動打包
準備工作
l 用到的工具
打包工具cabarc.exe
簽名工具signcode.exe
l 打包文件
WVC.ocx
LiteUnzip.dll
mfc80u.dll
mfcm80u.dll
msvcm80.dll
msvcp80.dll
msvcr80.dll
Microsoft.VC80.CRT.manifest
Microsoft.VC80.MFC.manifest
在製作cab包之前,需要準備以上的打包、簽名工具和文件,將cabarc.exe和signcode.exe複製到Java環境變量的bin目錄下。打包文件全部存放在webapp/download/wvc文件夾下。更新build.xml文件。
製作步驟
步驟1 準備inf文件
參照手動打包步驟。
步驟2 修改本地時間
由於代碼簽名證書已經過期,所以需要將本地時間修改成證書還沒有過期的時間,否則簽名失敗。如果擁有未過期的代碼簽名證書,此步驟可以忽略。
步驟3 執行build.xml的activex任務
在Eclipse中打開build.xml文件,執行activex任務。該任務會自動簽名wvc.ocx文件,生成wvc.cab並簽名