dll ocx cab IE 自動安裝

咱們打開淘寶等網站時,IE瀏覽器會提示安裝空間,這個控件即是用於對用戶名密碼進行加密的ActiveX控件。如何在咱們的站點上安裝如此控件,讓用戶能夠經過簡單的點擊即可方便使用咱們的空間呢?html

下面是如何讓在你的站點上安裝控件的方法。web

 

 


 

 基礎知識shell

html語言中Object標籤

定義和用法

定義一個嵌入的對象。請使用此元素向您的 XHTML 頁面添加多媒體。此元素容許您規定插入 HTML 文檔中的對象的數據和參數,以及可用來顯示和操做數據的代碼。<object> 標籤用於包含對象,好比圖像、音頻、視頻、Java applets、ActiveX、PDF 以及 Flash。object 的初衷是取代 img 和 applet 元素。不過因爲漏洞以及缺少瀏覽器支持,這一點並未實現。瀏覽器的對象支持有賴於對象類型。不幸的是,主流瀏覽器都使用不一樣的代碼來加載相同的對象類型。而幸運的是,object 對象提供瞭解決方案。若是未顯示 object 元素,就會執行位於 <object> 和 </object> 之間的代碼。經過這種方式,咱們可以嵌套多個 object 元素(每一個對應一個瀏覽器)。編程

實例

向HTML中添加對象:windows

<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>

Windows中註冊類ID:clsid

「通用惟一標識符」(UUID),用於標識 COM 組件。每一個 COM 組件在 Windows 註冊表中都有本身的 CLSID,以便讓其餘應用程序加載。api

ActiveX控件CLSID的獲取

在編譯完成每個ActiveX控件以後,系統會生成ocx.html文件,其中是調用該ActiveX控件的方法。該頁面中有一個標籤即爲Object,其中有一行則記錄着該ocx文件的CLSID,以下:瀏覽器

<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]開始執行安裝。

其它的節能夠自定義app

最開始通常是[Version]區: 編輯器

[Version]  
signature="$XXXX$"  
AdvancedINF=2.0 

"Signature"項定義了該INF文件須要運行在何種操做系統版本中。有$Windows NT$, $Chicago$, or $Windows 95$三個值供選擇,通常選擇$Chicago$便可。ide

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

[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值告訴ie到哪裏去獲得這個dll,file一共包括三個部分,第一部分是file,這個永遠都是這樣的(至少目前來講);第二部分告訴聲明支持的OS,win32表示windows,mac就是蘋果MAC OX了;第三部分是CPU類型,好比說x8六、 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文件

  1. 若是須要建立cab文件,首先須要Cabarc或者Makecab,它們隨着Cabinet SDK的安裝就有了,Cabinet SDK的下載地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp
  2. Cabarc能夠建立、查看或者解出cab裏面的文件,而Makecab則只能夠用來建立cab文件。
  3. 製做cab文件時須要將全部的相關文件都包含進去,能夠經過Depends(VC自帶的)檢查須要的文件。使用inf文件將這些東西都寫進去。
  4. inf搞法:inf文件描述cab中全部的ocx及dll文件,inf經過一些命名區域來提供須要的信息。 
    cabarc  N  ctrl1.cab  ctrl1.inf  ctrl1.dll 

    N表示要建立一個新的文件,ctrl1.cab是建立的文件名,ctrl1.inf是cab的inf,後而是須要加到cab裏的文件,可使用通配符。 
    而後就能夠將cab文件放到網頁上了

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

如何寫INF文件:

INF文件全稱Information File文件,是Winodws操做系統下用來描述設備或文件等數據信息的文件。INF文件是由標準的ASCII碼組成,您能夠用任何一款文字編輯器查看修改其中的內容。通常咱們老是認爲INF文件是系統設備的驅動程序,其實這是錯誤的認識,Windows之因此在安裝某些硬件的驅動時提示須要INF文件是由於INF文件爲該設備提供了一個全面描述硬件參數和相應驅動文件(DLL文件)的信息。就比如咱們看着說明書安裝電腦硬件同樣,咱們就是Windows系統,說明書就是INF文件。INF文件功能很是強大,幾乎能完成平常操做的全部功能。您能夠把它當作是Windows系統底下的超強批初理。要熟練掌握和理解甚至是編寫INF文件須要對其內部結構有至關的認識。下面就讓咱們來深刻到INF文件中的內部一窺其真面貌吧! 
 

INF文件的組成有節(Sections),鍵(Key)和值(value)三部分。 
關鍵節有 
[Version]版本描述信息,主要用於版本控制。 
[Strings]字符串信息,用於常量定義。 
[DestinationDirs]定義系統路徑信息。 
[SourceDisksNames]指明源盤信息。 
[SourceDisksNames]指明源盤文件名。 
[DefaultInstall]開始執行安裝。 
其它的節能夠自定義,下面用一實例來具體講解。 


程序代碼 
[Version] 
Signature
=$Chicago$ 
Provider
=%Author% 

[Strings] 
Product
="添加文件關聯演示" 
Version
="1.0" 
Author
="Xunchi" 
Copyright
="Copyright 2005" 
CustomFile
="inf" ;修改您須要的文件名後綴 
Program="NOTEPAD.EXE" ;修改您須要關聯的應用程序名 

[Add.Reg] 
HKCR
,"."%CustomFile%,"",FLG_ADDREG_TYPE_SZ ,%CustomFile%File 
HKCR
,%CustomFile%File,"",FLG_ADDREG_TYPE_SZ,安裝信息 
HKCR
,%CustomFile%"File\shell","",FLG_ADDREG_TYPE_SZ,open 
HKCR
,%CustomFile%"File\shell\open\command","",FLG_ADDREG_TYPE_SZ,%program% %1 

[DefaultInstall] 
AddReg
=Add.Reg 

  在
[Version]節中"Signature"項定義了該INF文件須要運行在何種操做系統版本中。有$Windows NT$, $Chicago$, or $Windows 95$三個值供選擇,通常選擇$Chicago$便可。項Provider中定義了該文件的創做來源,%Author%指引用Author項的值。您也可自定其它項來描述該INF文件的版本信息。該INF文件的做用是關聯文件,因此主要是對註冊表的操做,咱們來看[Add.Reg]節,共四條語句,格式都是同樣。HKCR表示根HKEY_CLASSES_ROOT,第二個參數是子鍵的路徑名,第三個參數是代表值的類型,最後是值(具體見附表)。以上都是對操做的定義與過程,在節[DefaultInstall]中是開始執行要安裝的流程,AddReg代表是對註冊表進行操做,操做對象是Add.Reg節中的定義。若是您把AddReg換成DelReg則是刪除註冊表中的鍵值。當鼠標單擊該INF文件在彈出的菜單中選擇「安裝」就開始執行您所定義的操做。該示例在系統的INF文件右鍵菜單中增長了查看編輯功能並設置了默認動做,由於在安裝了不瞭解的INF文件有可能對系統產生不良的影響,這樣雙擊文件就可打開編輯該文件了。 


  再看看INF文件在文件操做方面的能力吧。請看下面的一個例子。 

程序代碼 
[Version] 
Signature
=$Chicago$ 
Provider
=%Author% 
[Strings] 
Product
="文件複製和安裝演示" 
Version
="1.0" 
Author
="Xunchi" 
Copyright
="Copyright 2005" 

[FileList] 
ProcessList.exe 
;此文件已在當前目錄下,下同。 

[FileList1] 
Wordpad.exe 
[DestinationDirs] 
FileList
=11 ;安裝到Windows的系統目錄 
FileList1=10 ;安裝到Windows目錄 
[DefaultInstall] 
Copyfiles
=FileList,FileList1 

  相同的節的做用與上一例相似,請注意新出現的節
[FileList],這是我自定義的節名,它表示了一個文件組,[FileList1]也相似。在節[DestinationDirs]中需定義每一個文件組複製到的目錄(各個常量的意義見附表)。Copyfiles指明瞭須要進行復制的文件組。 
  INF文件的操做還包括服務(NT系統)程序的安裝和卸載,INI文件的轉換等。因爲這些操做都比較的複雜和繁瑣,且有必定的危險性故下次有機會再向你們進行深刻探討。 
  最後咱們來看一下INF文件的執行機制,這時你也許要問不就是簡單的執行一下「安裝」嗎?知其然不知其因此然知識水平是不會提升的。在「文件夾選項」中的「文件類型」找到INF文件的「安裝」命令看到一串命令。「rundll32.exe setupapi
,InstallHinfSection DefaultInst_all 132 %1」它表示了運行Dll文件setupapi.dll中的命令InstallHinfSection並傳遞給它起始節的名字 DefaultInstall。可見起始節是能夠自定義的。INF文件的執行也可用在各類支持API調用的編程工具中。至此INF文件的結構和運行機制咱們已基本瞭解,如今就讓你的思惟開動起來,讓它更好的爲咱們工做吧。 


註冊表操做的常量定義: 
---------------------------------------------------------- 
常量 根值 
HKCR HKEY_CLASSES_ROOT. 
HKCU HKEY_CURRENT_USER. 
HKLM HKEY_LOCAL_MACHINE. 
HKU HKEY_USERS. 
----------------------------------------------------------- 
FLG_ADDREG_APPEND 在多字符串後添加字符 
FLG_ADDREG_TYPE_SZ 字符類型 
FLG_ADDREG_TYPE_MULTI_SZ 字符串類型 
FLG_ADDREG_TYPE_EXPAND_SZ 擴展字符串類型 
FLG_ADDREG_TYPE_BINARY 二進制值 
FLG_ADDREG_TYPE_DWORD DWord值 
FLG_ADDREG_TYPE_NONE NULL值 
---------------------------------------------------------- 


[DestinationDirs]節中所定義的常量路徑 
---------------------------------------------------------- 
01 源目錄(後跟路徑) 
10 Windows目錄 
11 Windows系統目錄 
12 驅動目錄 
17 INF文件目錄 
18 幫助文件目錄 
20 字體目錄 
21 根目錄 
24 應用程序目錄 
25 共享目錄 
30 當前根目錄 
50 System目錄 
51 Spool 目錄 
52 Spool 驅動目錄 
53 用戶配置目錄 
---------------------------------------------------------- 

[DefaultInstall]節中定義的操做 
---------------------------------------------------------- 
LogConfig Log日誌文件配置 
Copyfiles 複製文件 
Renfiles 文件更名 
Delfiles 刪除文件 
UpdateInis 更新Inis 
UpdateIniFields 更新Ini字段 
AddReg 添加註冊項 
DelReg 刪除註冊項 
Ini2Reg Ini文件轉換爲Reg文件 
----------------------------------------------------------- 


INF文件應用示例
1、修改telnet服務,端口改成99,NTLM認證方式爲1。 
=============================== 
 

C:\myinf\Telnet.inf 

[Version] 
Signature
="$WINDOWS NT$" 
[DefaultInstall] 
AddReg
=AddRegName 
[My_AddReg_Name] 
HKLM
,SOFTWARE\Microsoft\TelnetServer\1.0,TelnetPort,0x00010001,99 
HKLM
,SOFTWARE\Microsoft\TelnetServer\1.0,NTLM,0x00010001,1 

安裝:rundll32.exe setupapi
,InstallHinfSection DefaultInstall 128 c:\myinf\telnet.inf 

說明:
[Version][DefaultInstall]是必須的,0x00010001表示REG_DWORD數據類型,0x00000000或省略該項(保留逗號)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。 
InstallHinfSection是大小寫敏感的。它和setupapi之間只有一個逗號,沒有空格。128表示給定路徑,該參數其餘取值及含義參見MSDN。 
特別注意,最後一個參數,必須是inf文件的全路徑,不要用相對路徑。 
inf文件中的項目都是大小寫不敏感的。 

2、服務 
=============== 

增長一個服務: 

[Version] 
Signature
="$WINDOWS NT$" 
[DefaultInstall.Services] 
AddService
=inetsvr,,My_AddService_Name 
[My_AddService_Name] 
DisplayName
=Windows Internet Service 
Description
=提供對 Internet 信息服務管理的支持。 
ServiceType
=0x10 
StartType
=2 
ErrorControl
=0 
ServiceBinary
=%11%\inetsvr.exe 

保存爲inetsvr.inf,而後: 

rundll32.exe setupapi
,InstallHinfSection DefaultInstall 128 c:\path\inetsvr.inf 

這個例子增長一個名爲inetsvr的服務(是否是很像系統自帶的服務,呵呵)。 

幾點說明: 
1,最後四項分別是 
服務類型:0x10爲獨立進程服務,0x20爲共享進程服務(好比svchost); 
啓動類型:
0 系統引導時加載,1 OS初始化時加載,2 由SCM(服務控制管理器)自動啓動,3 手動啓動,4 禁用。 
(注意,0和1只能用於驅動程序) 
錯誤控制:
0 忽略,1 繼續並警告,2 切換到LastKnownGood的設置,3 藍屏。 
服務程序位置:%
11%表示system32目錄,%10%表示系統目錄(WINNT或Windows),%12%爲驅動目錄system32\drivers。其餘取值參見DDK。你也能夠不用變量,直接使用全路徑。 
這四項是必需要有的。 
2,除例子中的六個項目,還有LoadOrderGroup、Dependencies等。不經常使用因此不介紹了。 
3,inetsvr後面有兩個逗號,由於中間省略了一個不經常使用的參數flags。 

刪除一個服務: 

[Version] 
Signature
="$WINDOWS NT$" 
[DefaultInstall.Services] 
DelService
=inetsvr 

很簡單,不是嗎? 

固然,你也能夠經過導入註冊表達到目的。但inf自有其優點。 
1,導出一個系統自帶服務的註冊表項,你會發現其執行路徑是這樣的: 
"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,74,
00,6c,00,6e,00,74,00,73,00,76,00,72,00,2e,00,65,00,78,00,65,00,00,00 
可讀性太差。其實它就是%SystemRoot%\system32\tlntsvr.exe,但數據類型是REG_EXPAND_SZ。當手動導入註冊表以增長服務時,這樣定義ImagePath顯然很不方便。若是用REG_SZ代替會有些問題——不能用環境變量了。即只能使用完整路徑。用inf文件徹底沒有這個問題,ServiceBinary(即ImagePath)自動成爲REG_EXPAND_SZ。 
2,最關鍵的是,和用SC等工具同樣,inf文件的效果是即時起效的,而導入reg後必須重啓纔有效。 
3,inf文件會自動爲服務的註冊表項添加一個Security子鍵,使它看起來更像系統自帶的服務。 

另外,AddService和DelService以及AddReg、DelReg能夠同時且重複使用。便可以同時增長和刪除多個服務和註冊表項。 

3、組策略 
========== 

1、密碼最小6位 
[version] 
signature
="$CHICAGO$" 
[System Access] 
MinimumPasswordLength 
= 6 
PasswordComplexity 
= 1 

保存爲gp.inf,而後導入: 
secedit /configure /db gp.sdb /cfg gp.inf /quiet 


2、關閉全部的「審覈策略 

echo 
[version] >1.inf 
echo signature
="$CHICAGO$" >>1.inf 
echo 
[Event Audit] >>1.inf 
echo AuditSystemEvents
=0 >>1.inf 
echo AuditObjectAccess
=0 >>1.inf 
echo AuditPrivilegeUse
=0 >>1.inf 
echo AuditPolicyChange
=0 >>1.inf 
echo AuditAccountManage
=0 >>1.inf 
echo AuditProcessTracking
=0 >>1.inf 
echo AuditDSAccess
=0 >>1.inf 
echo AuditAccountLogon
=0 >>1.inf 
echo AuditLogonEvents
=0 >>1.inf 
secedit /configure /db 
1.sdb /cfg 1.inf /log 1.log /quiet 
del 
1.* 


4、解決XP ipc$鏈接只有Guest權限 
==================== 

echo 
[version] >1.inf 
echo signature
="$CHICAGO$" >>1.inf 
echo 
[Registry Values] >>1.inf 
echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest
=4,0 >>1.inf 
secedit /configure /db 
1.sdb /cfg 1.inf /log 1.log 
del 
1.*

簽名

 

申請證書

 

要使用到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具體使用幫助可參考建立證書的工具(makecert.exe)

簽名

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

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

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

signtool 的具體使用幫助可參考簽名工具 (SignTool.exe)

相關文章
相關標籤/搜索