第一次發(fā)布一個activeX控件,真的費了不少力氣,主要是對發(fā)布的原理和過程不大清楚。在這里記下過程,以備后用和其它網(wǎng)友參考。
1,創(chuàng)建OCX:你要創(chuàng)建一個可用的OCX控件,并在本機測試通過。
2,打包CAB:WinCAB 是一種可視化的全新的CAB壓縮包制作軟件,它具有采用圖形界面、支持分卷壓縮、可制作具有自解包功能的CAB壓縮包(*.EXE文件格式)等優(yōu)秀功能, 這就從根本上解決了CAB壓縮包的制作問題。需要注意的是在運行WinCAB.exe時,必須確保makecab.exe文件也在相同的目錄下。
注:WinCAB在網(wǎng)上有很多下載,可以去百度搜,makecab.exe在系統(tǒng)盤windows\system32下。
一般來說,一個單獨的OCX不需要INF也可以打成CAB發(fā)布,所以這里就不介紹INF文件了,想了解的話,去我文章下邊的幾個鏈接。
3,數(shù)字簽名:做為測試,也可以不要數(shù)字簽名。只需要在客戶端PC的IE安全選項中,把級別調(diào)低或針對ACTIVEX設(shè)置調(diào)成enable。
關(guān)于證書和簽名 -|zuiwanting 發(fā)表于 2006-5-24 9:58:00
\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin下有關(guān)于證書和簽名相關(guān)工具
1。Makecert.exe ---證書創(chuàng)建工具
2。Cert2Spc.exe ---發(fā)行者證書測試工具
3。Signcode.exe ---文件簽名工具
建立自己的根證書:
makecert -sk myPK -ss myName -n "CN=LUO31工作室" -r c:\luo31.cer
sk-表示主題的密鑰容器位置,ss-主題的證書存儲名稱, n-證書頒發(fā)對象,r-證書存儲位置;
如果你需要導(dǎo)出私鑰文件,請不要使用sk,而換作s,eg:makecert -ss myName -n "CN=LUO31工作室" -sv c:\luo31.pvk -r c:\luo31.cer
建立自根證書授權(quán)的子證書:
makecert -sk "myPK" -is myName -n "CN=luo31" -$ commercial -ic c:\luo31.cer c:\31.cer
sk-表示主題的密鑰容器位置,is-頒發(fā)者的證書存儲名稱, n-證書頒發(fā)對象,ic-頒發(fā)者的證書存儲位置,-$-授權(quán)范圍(用于代碼簽名);
使用Cert2Spc生成spc發(fā)行者證書(可選):
cert2spc c:\31.cer c:\31.spc
使用signcode為你的程序,庫或cab包簽名:
雙 擊signcode,或在控制臺鍵入signcode,不帶參數(shù)會啟動簽名向?qū)АT诘谌竭x擇“自定義選項”,第四步選擇“從文件選擇”選擇31.spc 或31.cer,第五步選擇“CSP中的私鑰”,在密鑰容器中選擇我們定義的myPK,其他步驟默認(rèn)即可,如果想添加時間戳,請在時間戳服務(wù)器地址上鍵 入:(免費時間戳認(rèn)證)http://timestamp.verisign.com/scripts/timstamp.dll ;
完成后,觀察你所簽名的文件屬性,應(yīng)該已經(jīng)添加數(shù)字簽名項
注:如無Signcode.exe工具。也可使用signtool.exe這個工具從命令行啟動,支持界面向?qū)АR苍贐in目錄下。
4,HTTP部署:你需要一個HTTPSERVER,IIS或apache都可以。這個是另一大塊,關(guān)于這部分,我默認(rèn)為你已有一個HTTPSERVER。(如果真的沒有,那以這一塊為單位你可以在網(wǎng)上找到很多方法)。
5,網(wǎng)頁發(fā)布代碼:
<html>
<head>
<title>test</title>
</head>
<body>
<object name=axSAM classid=clsid:76D15F20-BE2A-4FEF-A215-FDF91B82CFAD style="height:18pt;width:120" codebase="http://192.168.11.212/airis/VirusCheck.cab#version=1, 0, 0, 3"></object>
<input name="Check Begin" value="Check Begin" type="button" onclick="axSAM.Check('192.168.11.212');" />
</body>
</html>
codebase 是你的cab的URL,#后面是版本。版本變化的時候IE才會更新OCX。axSAM.Check('192.168.11.212')
是我的自定義函數(shù),用以測試。
6,客戶端PC的IE設(shè)定:在客戶端PC的IE安全選項中,把級別調(diào)低或針對ACTIVEX設(shè)置調(diào)成enable。這樣的結(jié)果會是有的PC可以使用控件,有的不行。原因是WindowsXP SP2和IE7增強了對ActiveX的限制。
癥狀:
無法在某些XP SP2 的IE上顯示控件(實際上控件已經(jīng)注冊成功了)
結(jié)果:
上網(wǎng)搜索后,有微 軟關(guān)于XP SP2的說明,說是SP2補丁導(dǎo)致很多控件的無法正常的使用,提供了一個辦法,將訪問服務(wù)器的站點添加到“受信任的站點”(IE的“Internet選項 ”中,注意不要選擇“對改區(qū)域內(nèi)的所有站點都要求驗證(https://)”),這時某些有問題的SP2機器上顯示出來。
疑問猜想:
1。有些機器可以顯示,有些不能顯示,這可能和系統(tǒng)的某些未知補丁有關(guān)系
2。花錢注冊了控件簽名是否能夠解決這一問題
3。在有的(只有一臺,正版XP sp2, 經(jīng)常升級補丁),使用regsvr32 來注冊O(shè)CX都不可以?
引用MVP的話:
jiangsheng(蔣晟.Net[MVP]) (
) 信譽:290
2006-4-4 14:28:23
得分: 0
記 得WinXPSp2里面ActievX的限制更加嚴(yán)格,沒有數(shù)字簽名的控件會被禁用。對實現(xiàn)了IObjectSafety的控件也會有警告參考 http://verisign.com/products-services/security-services/code-signing/digital-ids-code-signing/index.html
7,小技巧:去注冊表中。開始菜單=》運行=》regedit 。在HKEY_CLASSES_ROOT下搜索你的OCX的名字,可以得到以O(shè)CX的CLSID為鍵名的鍵。在客戶端PC上以有這樣的注冊表信息為注冊成功。一般注冊成功的OCX被下載到系統(tǒng)盤目錄:\WINDOWS\Downloaded Program Files下。
以上內(nèi)容參考自:
http://dev.csdn.net/develop/article/65/65477.shtm
http://blog.csdn.net/birdme007/archive/2007/09/14/1784804.aspx
http://blog.csdn.net/MLiang/category/184234.aspx
注:以上灰色部分為引用部分,綠色部分為特別注意部分。