|
但是我的控制元件必須作數字簽名以後,IE才會下載安裝。問題是如何給ActiveX控制元件作數字簽名呢?現將具體步驟與大家分享。
首先我需要一套做數字簽名的工具。如果你沒有,可以到以下地址下載:
http://files.cnblogs.com/babyt/SignTool.rar
控制元件的名字是CustForm.ocx。首先,我們需要建立一個.CAB檔案用來把所有需要釋出的檔案壓縮在一起。我們需要一起釋出的檔案是CustForm.lic檔案。它是Delphi在我們建立控制元件工程的時候為我們生成的。如果不釋出這個檔案,你的控制元件即使下載安裝成功,IE也無法顯示它。為了在一個.CAB檔案中釋出多個檔案,我們必須先建立一個.INF檔案。一個.INF檔案可以告訴IE,它需要下載的檔案和在哪裡可以得到這些檔案。
1. 建立.INF檔案
建立一個.INF檔案很簡單,用記事本程式編寫就可以了。我們把我們的.INF檔案取名為GMTestX.inf。因為我們要在.CAB檔案中放入GMTest.ocx和GMTest.lic這兩個檔案,所以我們的.INF檔案的內容如下:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [version] signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] CustForm.ocx=CustForm.ocx CustForm.lic=CustForm.lic //如果建立Active Form時沒有選擇Make Conctrol Lincensed 則不會產生.lic檔案,那麼建立.inf檔案時可去掉此行 [CustForm.ocx] file-win32-x86=thiscab clsid={C504DF79-C5EC-4314-AC3E-1F770DB81A01} FileVersion=1,0,0,0 RegisterServer=yes [CustForm.lic]//如果建立Active Form時沒有選擇Make Conctrol Lincensed 則不會產生.lic檔案,那麼建立.inf檔案時可去掉此行 file-win32-x86=thiscab//如果建立Active Form時沒有選擇Make Conctrol Lincensed 則不會產生.lic檔案,那麼建立.inf檔案時可去掉此行 FileVersion=1,0,0,0//如果建立Active Form時沒有選擇Make Conctrol Lincensed 則不會產生.lic檔案,那麼建立.inf檔案時可去掉此行
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 在這個.INF檔案的[version]部分有兩句程式碼。signature="$CHICAGO$"表示這個.INF檔案和Windows95或其後版本和Windows NT 4.0或其後的版本相容。AdvancedINF=2.0表示Advpack.dll的版本,IE 4.0或其後版本必須匯入這個檔案去解析這個.INF檔案。在這裡要求的版本是2.0。
至於[Add.Code]部分,其中列出了在一個.CAB檔案中需要下載的檔案,並把這些檔案的詳細資訊對映到其後對應的各個部分。比如[CustForm.ocx]部分中的資訊就是下載CustForm.ocx這個檔案的相關資訊。
在[CustForm.ocx]部分的第一句程式碼告訴IE,CustForm.ocx檔案就包含在這個.CAB檔案中。第二行註明了這個控制元件的CLSID號。第三行是控制元件的版本號。第四行告訴IE需要使用前面的CLSID號來註冊這個控制元件。[CustForm.lic]部分就不多講了。
2. 建立.CAB檔案
在命令列中輸入以下程式碼把CustForm.ocx、CustForm.inf和CustForm.lic這三個檔案新增到一個.CAB檔案中,這個檔案取名為CustForm.cab:
cabarc.exe -s 6144 N CustForm.cab CustForm.ocx CustForm.inf CustForm.lic
3. 建立證書檔案
在命令列輸入以下命令:
makecert -sv CustForm.pvk -r -n "CN=SunStar" CustForm.cer
4. 轉換證書:
cert2spc CustForm.cer CustForm.spc
5. 建立另外一個自簽名證書,叫test.cer
在命令列中依次輸入以下兩條命令:
makecert -sv test.pvk -r -n "CN=SunStar" test.cer
cert2spc test.cer test.spc
6. 從test.cer建立test.ctl檔案
makectl test.cer test.ctl
7. 用CustForm.pvk和CustForm.spc這兩個檔案給test.ctl作數字簽名
signcode -v CustForm.pvk -spc CustForm.spc test.ctl
8. 把test.ctl移動到受信系統儲存區
certmgr -add -ctl test.ctl -s trust
9. 把CustForm.cer移動到根系統儲存區
certmgr -add -c GMTestX.cer -s root 10. 用test.pvk和test.spc給CustForm.cab作數字簽名
singcode -v test.pvk -spc test.spc CustForm.cab
11. 檢查檔案是否通過驗證
chktrust CustForm.cab
如果檔案通過了數字簽名檢測,系統會詢問是否安裝這個檔案,這時候一定要選擇安裝,整個簽名過程才能完成。
執行以上步驟的過程中,有時候需要使用者輸入密碼。使用者可以任意選擇一個密碼,比如12345。
接下來,我們把一個呼叫Delphi的Web Deploy命令產生的檔案CustForm.htm複製到C:\Inetpub\wwwroot\OurHTML資料夾中,並修改其內容如下:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <HTML> <H1> 群組配置 </H1><p> <HR><center><P> <OBJECT id =CustForm classid="clsid:7E302B32-912F-427B-98D0-03AB15716E81" codebase="/OurCAB/CustFormX.cab#version=1,0,0,0" width=100% height=80% align=center hspace=0 vspace=0 <param name=Invaild value=Invaild> <param name=wsroot value=http://192.168.0.56:8080/adms/services/> <!--value={TMPL,OUTPUT,COND}--> > </OBJECT> </HTML>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 再將簽名的CustForm.cab檔案移動到C:\Inetpub\wwwroot\OurCAB資料夾中。
好了,現在開啟IE,在位址列中輸入:http://localhost/OurHTML/CustForm.htm後,IE詢問是否下載這個控制元件,我們選擇是,就可以看到我們的ActiveX控制元件的窗體了。大功告成!
總算完成了。步驟挺繁瑣,但是好像必須這麼做。我們對這個過程中涉及的相關技術並不十分了解。察看MSDN文件可以找到很多資料,想全部搞清楚得費點勁。不管怎樣,用這些步驟就可以達到目的。如果你發現有什麼錯誤,或者有什麼疑問,歡迎留言。如果這篇文章對你有所幫助,目的就達到了。謝謝。
|
及其實現拷貝過來就OK.
3. 設定web Deploy Option, 設定 include version 和 Auto increment release number 兩項即可。然後把web Deploy出去, 獲得ocx和htm檔案。
4. 使用signtools 對產生的OCX進行資料簽名. 例如
|
這樣就對ocx進行了數字簽名。(過程中密碼隨意,因為正式證書要花錢的)
5. 把Patrol.cer 分發到各個客戶端IE, 安裝後即可使用OCX,而且只要使用一次即可。
其實這一步可以不用,因為到客戶端連線此頁面時會彈出對話方塊,裡邊有未知發行商的連線,可以實現自動下載證書。
6. 伺服器釋出時要引入RootPatrol.cer證書即可。
CAB格式沒有試過, 不過猜想應該可以。
其中有個問題, 在本機做數字簽名後,本機測試OK, 然後把web和ocx放到其他的IIS上,使用RootPatrol.cer匯入後也可用。
delphi 釋出後,但是如果先把web和ocx放到別的IIS上,然後再做數字簽名就不行了, 奇怪? 猜想是機器環境的問題,但是是哪個環境不得而知。