將ocx和DLL檔案打包成cab檔案,實現IE瀏覽器線上安裝

來源:互聯網
上載者:User
基礎知識

html語言中Object標籤
定義和用法
定義一個嵌入的對象。請使用此元素向您的 XHTML 頁面添加多媒體。此元素允許您規定插入 HTML 文檔中的對象的資料和參數,以及可用來顯示和操作資料的代碼。<object> 標籤用於包含對象,比像、音頻、視頻、Java applets、ActiveX、PDF 以及 Flash。object 的初衷是取代 img 和 applet 元素。不過由於漏洞以及缺乏瀏覽器支援,這一點並未實現。瀏覽器的對象支援有賴於物件類型。不幸的是,主流瀏覽器都使用不同的代碼來載入相同的物件類型。而幸運的是,object 對象提供瞭解決方案。如果未顯示 object 元素,就會執行位於 <object> 和 </object> 之間的代碼。通過這種方式,我們能夠嵌套多個 object 元素(每個對應一個瀏覽器)。

執行個體
向HTML中添加對象:

view plaincopy to clipboardprint?<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1"    width="100" height="50">    <param name="BorderStyle" value="1" />    <param name="MousePointer" value="0" />    <param name="Enabled" value="1" />    <param name="Min" value="0" />    <param name="Max" value="10" />  </object>  <object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1"
width="100" height="50">
  <param name="BorderStyle" value="1" />
  <param name="MousePointer" value="0" />
  <param name="Enabled" value="1" />
  <param name="Min" value="0" />
  <param name="Max" value="10" />
</object> 參考

http://www.w3school.com.cn/tags/tag_object.asp

Windows中註冊類ID:clsid
“通用唯一識別碼”(UUID),用於標識 COM 組件。每個 COM 組件在 Windows 註冊表中都有自己的 CLSID,以便讓其他應用程式載入。

ActiveX控制項CLSID的擷取
在編譯完成每一個ActiveX控制項之後,系統會產生ocx.html檔案,其中是調用該ActiveX控制項的方法。該頁面中有一個標籤即為Object,其中有一行則記錄著該ocx檔案的CLSID,如下:

view plaincopy to clipboardprint?<object   ID="TopoSceneViewer"      WIDTH=800   HEIGHT=600   CLASSID="CLSID:321B84C8-3745-4AC9-BF04-55753F40CE63">    </object>  <object
 ID="TopoSceneViewer"  
 WIDTH=800
 HEIGHT=600
 CLASSID="CLSID:321B84C8-3745-4AC9-BF04-55753F40CE63">
</object>
--------------------------------------------------------------------------------

建立cab檔案
cab檔案中需要包含一系列檔案,其中.inf檔案會告訴IE如何去安裝這些檔案。我們從.inf檔案開始怎麼寫inf
INF檔案的組成有節(Sections),鍵(Key)和值(value)三部分。 關鍵節有 [Version]版本描述資訊,主要用於版本控制。    [Strings]字串資訊,用於常量定義。    [DestinationDirs]定義系統路徑資訊。    [SourceDisksNames]指明來源硬碟資訊。    [SourceDisksNames]指明來源硬碟檔案名稱。    [DefaultInstall]開始執行安裝。  [Version]版本描述資訊,主要用於版本控制。
[Strings]字串資訊,用於常量定義。
[DestinationDirs]定義系統路徑資訊。
[SourceDisksNames]指明來源硬碟資訊。
[SourceDisksNames]指明來源硬碟檔案名稱。
[DefaultInstall]開始執行安裝。 其它的節可以自訂

最開始一般是[Version]區:

[Version]     signature="$XXXX$"     AdvancedINF=2.0   [Version]  
signature="$XXXX$"  
AdvancedINF=2.0  "Signature"項定義了該INF檔案需要運行在何種作業系統版本中。有$Windows NT$, $Chicago$, or $Windows 95$三個值供選擇,一般選擇$Chicago$即可。

接下來就是最重要的[Add.Code]區:

[Add.Code]     Ctrl1.dll=C1Section     Ctrl2.dll=Ctrl2.dll   [Add.Code]  
Ctrl1.dll=C1Section  
Ctrl2.dll=Ctrl2.dll  前面是要下載的檔案名稱,後面是對應這個檔案的地區名,可以是任何名字,不過一般都是和檔案的名字相同,這樣方便維護。

還有需要注意是在[Add.Code]區出現的檔案要根據依賴性進行排序,例如前面說的ctrl1.dll要依賴於ctrl2.dll,則ctrl2.dll要出現在ctrl1.dll的前面。因為安裝時是按照相反的順序進行的,也就是說先安裝ctrl2.dll,然後才是ctrl1.dll,哧哧,記清楚了,不要搞反了。

再接下來是各個檔案的地區了

[Ctrl1.dll]     file-win32-x86=thiscab     RegisterServer=yes     clsid={.....}     DestDir=       FileVersion=1,0,0,0   [Ctrl1.dll]  
file-win32-x86=thiscab  
RegisterServer=yes  
clsid={.....}  
DestDir=    
FileVersion=1,0,0,0  [Ctrl1.dll]地區中的第一個file值告訴ie到哪裡去得到這個dll,file一共包括三個部分,第一部分是file,這個永遠都是這樣的(至少目前來說);第二部分告訴聲明支援的OS,win32表示windows,mac就是蘋果MAC OX了;第三部分是CPU類型,比如說x86、 ppc (Power PC)、 mips或者alpha了。

file的值可以取三個一個URL、ignore和thiscab,如果是URL則說明到URL所在的位置去下;如果是ignore說明對於這種OS和CPU,不需要下載這個檔案(ctrl1.dll);如果是thiscab很明顯就在當前的cab檔案中了。

接下來是RegisterServer,可以取兩個值yes和no,如果為yes則說明ie要註冊該dll,如果是no就不必了。+如果這裡選yes,則需要指定clsid,否則clsid一行可以省略。+

再下來是DestDir,它的值是dll將要存到本地硬碟的位置,如果它的值是10,則將dll放到\Windows或者\WinNT下;如果是11,則放到\Windows\System或者\WinNT\System32下;如果是空(就是沒有值)則會放到\Windows或者\WinNT下的Downloaded Program Files目錄下;

最後是FileVersion,這個就比較明顯了,說明了ctrl1.dll的版本號碼。

其他部分詳見參考文獻。

建立cab檔案
如果需要建立cab檔案,首先需要Cabarc或者Makecab,它們隨著Cabinet SDK的安裝就有了,Cabinet SDK的是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp
Cabarc可以建立、查看或者解出cab裡面的檔案,而Makecab則只可以用來建立cab檔案。
製作cab檔案時需要將所有的相關檔案都包含進去,可以通過Depends(VC內建的)檢查需要的檔案。使用inf檔案將這些東西都寫進去。
inf搞法:inf檔案描述cab中所有的ocx及dll檔案,inf通過一些命名地區來提供需要的資訊。

cabarc  N  ctrl1.cab  ctrl1.inf  ctrl1.dll   cabarc  N  ctrl1.cab  ctrl1.inf  ctrl1.dll  N表示要建立一個新的檔案,ctrl1.cab是建立的檔案名稱,ctrl1.inf是cab的inf,後而是需要加到cab裡的檔案,可以使用萬用字元。
然後就可以將cab檔案放到網頁上了
參考
如何編寫INF:http://www.cnblogs.com/sbdx/archive/2006/12/14/whatisinffile.html
如何寫cab相關的INF:http://docs.google.com/Doc?docid=0Aehzv88zbfy_ZGdncGdqczZfMjIxZHNnZDhtYzg&hl=zh_CN

--------------------------------------------------------------------------------

簽名

申請認證
要使用到makecert工具,在VS2005目錄下搜尋可以搜尋到。

在命令提示行中執行

makecert -sk myNewKey -r -n "CN=發證機關的名字,OU=Certification,O=公司名字,E=name@email.com" -ss my myNew.cer   cert2spc myNew.cer myNew.spc  makecert -sk myNewKey -r -n "CN=發證機關的名字,OU=Certification,O=公司名字,E=name@email.com" -ss my myNew.cer
cert2spc myNew.cer myNew.spc makecert具體使用協助可參考建立認證的工具(makecert.exe)

簽名

要使用到signtool工具,也可以在VS2005目錄下找到。

signtool工具有多種使用模式,下面使用的是帶UI的嚮導模式。
在命令提示行中執行

signtool  signwizard  signtool  signwizard 之後進入signcodewizard:

step1.選擇要簽名的cab檔案   step2.自訂   step3.從檔案中選擇 myNew.spc   step4.csp中的私密金鑰/密鑰容器:myNewKey   step5.sha1   step6.next   step7.描述:外掛程式名稱/web:www.yourcompany.com   step8.http://timestamp.verisign.com/scripts/timstamp.dll  step1.選擇要簽名的cab檔案
step2.自訂
step3.從檔案中選擇 myNew.spc
step4.csp中的私密金鑰/密鑰容器:myNewKey
step5.sha1
step6.next
step7.描述:外掛程式名稱/web:www.yourcompany.com
step8.http://timestamp.verisign.com/scripts/timstamp.dll signtool 的具體使用協助可參考簽名工具 (SignTool.exe)

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/wangjingfei/archive/2010/03/25/5417028.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.