前言
在我們的一個項目中,使用到了大華網絡監控攝像頭槍機,網絡上下載了其ActiveX插件,但是發現其所提供的類庫沒有打包處理。這就導致我們每次給用戶安裝的時候,均需要手動注冊一下。比較要命的是,一旦用戶電腦上的攝像頭黑屏或者不能用的時候,我們都需要遠程指導用戶怎么操作,相當麻煩。所以,遂決定將這些類庫打包一下,以便實現自動無值守安裝。
這里先將工具列舉一下:
iexpress.exe 用於CAB打包
signtool.exe 用於附加數字簽名
makecab.exe 用於CAB打包
http://www.ca365.com 用於申請免費數字證書
下面讓我們開始進行制作。
第一步,准備Inf配置文件。
首先,新建一個后綴名為 dahua.inf 的文件並打開,輸入如下內容並保存:
[version] signature="$CHICAGO$" AdvancedINF=2.0 [DefaultInstall] CopyFiles=files RegisterOCXs=RegisterFiles [DefaultUninstall] cleanup=1 Delfiles=files UnRegisterOCXs=RegisterFiles [SourceDisksNames] 1 = %DiskName%,"dahua.cab",1 [SourceDisksFiles] RealPlayX.ocx=1 dhnetsdk.dll=1 ssleay32.dll=1 MP3Decoder.dll=1 libeay32.dll=1 jpegdec.dll=1 IvsDrawer.dll=1 dllmpeg4.dll=1 dllh264.dll=1 DllDeinterlace.dll=1 dhplay.dll=1 dhdvr.dll=1 DhDecode.dll=1 dhconfigsdk.dll=1 AmrDll.dll=1 AACDecoder.dll=1 [RegisterFiles] %11%\dahua\RealPlayX.ocx [DestinationDirs] files=11, dahua [files] RealPlayX.ocx=RealPlayX.ocx dhnetsdk.dll=dhnetsdk.dll ssleay32.dll=ssleay32.dll MP3Decoder.dll=MP3Decoder.dll libeay32.dll=libeay32.dll jpegdec.dll=jpegdec.dll IvsDrawer.dll=IvsDrawer.dll dllmpeg4.dll=dllmpeg4.dll dllh264.dll=dllh264.dll DllDeinterlace.dll=DllDeinterlace.dll dhplay.dll=dhplay.dll dhdvr.dll=dhdvr.dll DhDecode.dll=DhDecode.dll dhconfigsdk.dll=dhconfigsdk.dll AmrDll.dll=AmrDll.dll AACDecoder.dll=AACDecoder.dll [RealPlayX.ocx] file-win32-x86=thiscab clsid={30209FBC-57EB-4F87-BF3E-740E3D8019D2} DestDir=11 FileVersion=1,0,0,1 RegisterServer=yes [Strings] DiskName = "dahua"
最開始一般是[Version]區,這里不用管,保持默認內容就行。
然后是[DefaultInstall]區,表明文件拷貝的地方,我們這里為[files]區下的所有文件,並將[RegisterFiles ]區下的文件進行注冊。
然后是[RegisterFiles]區,表明注冊System32\dahua文件夾下的RealPlayX.ocx
然后是[DestinationDirs]區,11表明放到 Windows\System或者\WinNT\System32下,dahua則是創建的子級文件夾。
最后是[RealPlayX.ocx]區,第一個file值告訴ie到哪里去得到這個ocx,file一共包括三個部分,第一部分是file,這個永遠都是這樣的;第二部分告訴聲明支持的OS,win32表示windows,mac就是蘋果MAC OX了;第三部分是CPU類型,比如說x86、mips等。file的值可以取三個:一個URL、ignore和thiscab,如果是URL則說明到URL所在的位置去下;如果是ignore說明對於這種OS和CPU,不需要下載這個文件;如果是thiscab就在當前的cab文件中了。第二部分是RegisterServer,可以取兩個值yes和no,如果為yes則說明ie要注冊該ocx,如果是no就不必了;接下來是clsid,需要填寫該ocx的class guid。再下來是DestDir,它的值是ocx將要存到本地硬盤的位置,如果它的值是10,則將ocx放到\Windows或者\WinNT下;如果是11,則放到\Windows\System或者\WinNT\System32下;如果是空(就是沒有值)則會放到\Windows或者\WinNT下的Downloaded Program Files目錄下;最后是FileVersion,說明了ocx的版本號。
第二步,制作CAB包。
打開iexpress,按照下面的順序來一一進行:
注意:在進行第五步的時候,請注意文件夾里面一定要放置makecab.exe,否則會導致生成不成功。
所有步驟進行完成后,會得到一個dahua.cab包。
第三步,對CAB包進行簽名。
首先,我們需要申請一個數字簽名證書。
打開http://www.ca365.com/網站,點擊免費證書下的“用表格申請證書”選項,這時會彈出“申請免費證書“頁面。其中,“識別信息”可以隨意填寫,“證書用途”要選擇“代碼簽名證書”,“加密服務提供”是用微軟提供的“Microsoft Strong Cryptographic Provider”,其他默認,點“提交”即可。最后點擊”下載證書“就可以把生成的”大華網絡監控.cer”下載到自己的電腦中。
然后,我們需要將數字簽名證書導入到IE中。
打開IE瀏覽器,打開菜單,點選”工具“按鈕,彈出下拉菜單,選擇”Internet選項“,切換到”內容“選項卡,點擊”證書“按鈕,點擊”導入“按鈕,導入剛剛生成的數字簽名證書。導入成功后,我們就可以看到相關證書信息了。
之后,打開signtool.exe,在命令行窗口下輸入signtool.exe signwizard來啟動可視化安裝界面。按照如下圖示一步一步進行:
注意,其中一步需要填寫”給數據蓋時間戳“,我們將”將時間戳添加到數據中“ 選中,然后在時間戳服務URL欄寫入:
http://timestamp.verisign.com/scripts/timstamp.dll
做完這一步,我們就可以得到一個完整的數字簽名包。
第四步:嵌入到網頁中使用。
打開網頁,在需要嵌入的地方寫入如下代碼:
1: <object id="AV_RealPlayX" style="width:100%; height:100%;"
2: classid="CLSID:30209FBC-57EB-4F87-BF3E-740E3D8019D2"
3: codebase="DaHua.CAB#version=1,0,0,1">
4: <param name="_Version" value="65536" />
5: <param name="_ExtentX" value="22357" />
6: <param name="_ExtentY" value="16589" />
7: <param name="_StockProps" value="0" />
8: </object>
其中param根據你的activex的控件的需要進行配置。尤其需要注意classid和codebase這兩個屬性,只要配置對了就行。
第五步:IE權限設置。
由於Activex只能運行在支持Activex的瀏覽器中,尤其是IE中,所以這里我們需要對IE瀏覽器進行下設置。
打開IE,點擊”工具“菜單,點擊”Internet選項“,在彈出的窗口中,選擇”安全“標簽,切換到”可信站點“,點擊”自定義級別“,將”對標記為可安全執行腳本的ActiveX控件執行腳本“設為”啟用“;將”對未標記為可安全執行腳本的ActiveX控件初始化並執行腳本“設為”啟用“;將”下載未簽名的ActiveX控件“設為”提示“;將”下載已簽名的ActiveX控件“設為”啟用“即可。
然后點擊”站點“按鈕,將”http://localhost“添加到可信列表,並去掉勾選”對該區域的所有站點要求服務器驗證(https:)“。
最后重啟瀏覽器。
第六步:設置完畢,運行。
設置完畢后,打開瀏覽器,輸入網址,運行:
首先,我們可以成功看到視頻效果:
然后打開System32文件夾,我們可以看到一個名稱為dahua的文件夾被建立,並且所有的dll和ocx都被放入了進來。
好了,就是這些,希望對你有用。謝謝。
添加信任列表
最后需要說明,運行此Activex插件需要將當前網址添加到信任列表。請將如下的腳本保存為vbs文件,然后運行即可。
on Error Resume Next Const HKEY_CURRENT_USER = &H80000001 strComputer = "." Set objReg=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\" _ & "ZoneMap\Ranges\Range1" objReg.CreateKey HKEY_CURRENT_USER, strKeyPath strValueName = "http" dwValue = 2 strValueNameEx = ":Range" dwValueEx="123.7.63.174" objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueNameEx, dwValueEx objReg.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue