发布Activex
1、如果需要創建cab文件,首先需要Cabarc或者Makecab,它們隨著Cabinet ?SDK的安裝就有了,Cabinet ?SDK的下載地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp。 ?
Cabarc可以創建、查看或者解出cab里面的文件,而Makecab則只可以用來創建cab文件。 ?
2、制作cab文件時需要將所有的相關文件都包含進去,可以通過Depends(VC自帶的)檢查需要的文件。使用inf文件將這些東西都寫進去。 ?
3、inf搞法:inf文件描述cab中所有的ocx及dll文件,inf通過一些命名區域來提供需要的信息。 ?
?
怎么寫inf ?
最開始一般是[Version]區: ?
eg: ?[Version] ?
? ? ? ?signature="$XXXX$" ?
? ? ? ?AdvancedINF=2.0 ?
接下來就是最重要的[Add.Code]區: ?
eg: ?[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類型,比如說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就不必了; ?
再下來是DestDir,它的值是dll將要存到本地硬盤的位置,如果它的值是10,則將dll放到/Windows或者/WinNT下;如果是11,則放到/Windows/System或者 ?
/WinNT/System32下;如果是空(就是沒有值)則會放到/Windows或者/WinNT下的Downloaded ?Program ?Files目錄下; ?
最后是FileVersion,這個就比較明顯了,說明了ctrl1.dll的版本號。 ?
有時候我們使用VB來開發控件的時候,需要將VB的虛擬機裝上去,它需要一些其它的說明的,簡單地講一下吧: ?
在[Add.Code]中增加一項MSVBVM60.DLL=MSVBVM60.DLL(以VB6為例)下面是 ?
MSVBVM60.DLL區域: ?
[MSVBVM60.DLL] ?
?? ?? ?? ??hook=MSVBVM60.cab_Installer ?
?? ?? ?? ??FileVersion=6,0,81,76 ?
FileVersion很明顯,是版本號,就不再說發,就說說hook吧。 ?
hook區域是在安裝的時候需要執行的區域,它分為兩種,一種是有條件的,另外一種是無條件的,無條件的hook區域是必須執行的,反之則根據條件判斷是否執行。以[Setup ?Hooks]標記的區域是無條件區域,如下所示 ?
[Setup ?Hooks] ?
? ? ? ?hookname=section-name ?
?
[section-name] ?
run=%EXTRACT_DIR%/setup.exe ?
無條件區域常用來通過一個inf文件執行一個安裝程序,這就是我們在資源管理器右鍵點擊一個inf文件時在執行安裝這樣的菜單的原因了 ?
當ie下載了一個cab文件,如果文件中沒有[Add.Code],則處理[Setup ?Hooks]區域,運行run所指定程序,哧哧,上面就是setup.exe; ?
條件區域則為在一定條件下執行,前面為MSVBVM60.DLL指定的hook區域就是一個條件區域,如果在MSVBVM60.DLL指定的CLSID或者version不能滿足需要而且沒有file這個命名值,則執行hook所指定的區域。 ?
[MSVBVM60.cab_Installer] ?
file-win32-x86=http://activex.microsoft.com/controls/vb6/VBRun60.cab ?
run=%EXTRACT_DIR%/VBRun60.exe ?
上面[MSVBVM60.cab_Installer]是一個hook區域,它也包含了一個file值,指定一個URL,表示MSVBVM60.DLL可以從這個URL下載得到;run則說明了執行哪一個文件 ?
這里有必要說明一下的是,MS對一些常用的Redistributable ?Microsoft ?DLLs ?
可以通過指定CODEBASE屬性為http://activex.microsoft.com/controls,這樣在cab文件中就中需要包含這些文件,在計算機上有一個文件redist.txt上面的dll就是Redistributable ?Microsoft ?DLLs ?
?
?
創建一個cab文件: ?
cabarc ?N ?ctrl1.cab ?ctrl1.inf ?ctrl1.dll ?
N表示要創建一個新的文件,ctrl1.cab是創建的文件名,ctrl1.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。 ?
然后就可以將cab文件放到網頁上了 ?
<OBJECT ?ID="Ctrl1Obj" ?
? ? ? ? ? ? ? ?CLASSID="clsid:....................................." ?
? ? ? ? ? ? ? ?CODEBASE="http://server.com/ctrl1.cab#version=8,0,0,5007"> ?
</OBJECT> ?
這里也在一個version,不過這里的version是指控件的version,而inf里的是文件的version。 ?
?
?
制作電子簽名: ?
首先從下面的網址下載制作簽名的工具SignCode,地址是 ?
http://msdn.microsoft.com/workshop/gallery/tools/authenticode/authcode.asp ?
從簽名授權中心如VeriSign或者你的局域網上運行的Microsoft ?Certificate ? ?
Server授權服務器得到一個certificate,在申請授權的過程你會得到一個私鑰。 ?
也可以使用MakeCert.exe和Cert2Spc.exe創建的私鑰進行測試,方法是首先使用MakeCert創建一個X.509的certificate(.cer文件) ?
? ? ? ?MakeCert ?-sv ?MyKey.pvk ?n ?"CN=My ?Software ?Company" ?MyCert.cer ?
然后利用Cert2Spc將.cer文件轉換成為PKCS ?#7軟件發布Certificate(.spc文件), ?
? ? ? ?Cert2Spc ?MyCert.cer ?MyCert.spc ?
利用你下載的SignCode對你的cab文件進行電子簽名 ?
? ? ? ?SignCode ?-spc ?MyCert.spc ?-v ?MyKey.pvk ?-t ?http:// ?
? ? ? ? ? ? ? ?timestamp.verisign.com/scripts/timstamp.dll ?ctrl1.cab ?
SignCode還可以指定一些其它的參數,就不說了,太長了,哧哧。 ?
雖然可以利用測試的.cer和.spc文件,但是在發布的時候,必須申請。 ?
?
其實東西在SDK中都有說明,不過都是E文的,慢慢看.
Cabarc可以創建、查看或者解出cab里面的文件,而Makecab則只可以用來創建cab文件。 ?
2、制作cab文件時需要將所有的相關文件都包含進去,可以通過Depends(VC自帶的)檢查需要的文件。使用inf文件將這些東西都寫進去。 ?
3、inf搞法:inf文件描述cab中所有的ocx及dll文件,inf通過一些命名區域來提供需要的信息。 ?
?
怎么寫inf ?
最開始一般是[Version]區: ?
eg: ?[Version] ?
? ? ? ?signature="$XXXX$" ?
? ? ? ?AdvancedINF=2.0 ?
接下來就是最重要的[Add.Code]區: ?
eg: ?[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類型,比如說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就不必了; ?
再下來是DestDir,它的值是dll將要存到本地硬盤的位置,如果它的值是10,則將dll放到/Windows或者/WinNT下;如果是11,則放到/Windows/System或者 ?
/WinNT/System32下;如果是空(就是沒有值)則會放到/Windows或者/WinNT下的Downloaded ?Program ?Files目錄下; ?
最后是FileVersion,這個就比較明顯了,說明了ctrl1.dll的版本號。 ?
有時候我們使用VB來開發控件的時候,需要將VB的虛擬機裝上去,它需要一些其它的說明的,簡單地講一下吧: ?
在[Add.Code]中增加一項MSVBVM60.DLL=MSVBVM60.DLL(以VB6為例)下面是 ?
MSVBVM60.DLL區域: ?
[MSVBVM60.DLL] ?
?? ?? ?? ??hook=MSVBVM60.cab_Installer ?
?? ?? ?? ??FileVersion=6,0,81,76 ?
FileVersion很明顯,是版本號,就不再說發,就說說hook吧。 ?
hook區域是在安裝的時候需要執行的區域,它分為兩種,一種是有條件的,另外一種是無條件的,無條件的hook區域是必須執行的,反之則根據條件判斷是否執行。以[Setup ?Hooks]標記的區域是無條件區域,如下所示 ?
[Setup ?Hooks] ?
? ? ? ?hookname=section-name ?
?
[section-name] ?
run=%EXTRACT_DIR%/setup.exe ?
無條件區域常用來通過一個inf文件執行一個安裝程序,這就是我們在資源管理器右鍵點擊一個inf文件時在執行安裝這樣的菜單的原因了 ?
當ie下載了一個cab文件,如果文件中沒有[Add.Code],則處理[Setup ?Hooks]區域,運行run所指定程序,哧哧,上面就是setup.exe; ?
條件區域則為在一定條件下執行,前面為MSVBVM60.DLL指定的hook區域就是一個條件區域,如果在MSVBVM60.DLL指定的CLSID或者version不能滿足需要而且沒有file這個命名值,則執行hook所指定的區域。 ?
[MSVBVM60.cab_Installer] ?
file-win32-x86=http://activex.microsoft.com/controls/vb6/VBRun60.cab ?
run=%EXTRACT_DIR%/VBRun60.exe ?
上面[MSVBVM60.cab_Installer]是一個hook區域,它也包含了一個file值,指定一個URL,表示MSVBVM60.DLL可以從這個URL下載得到;run則說明了執行哪一個文件 ?
這里有必要說明一下的是,MS對一些常用的Redistributable ?Microsoft ?DLLs ?
可以通過指定CODEBASE屬性為http://activex.microsoft.com/controls,這樣在cab文件中就中需要包含這些文件,在計算機上有一個文件redist.txt上面的dll就是Redistributable ?Microsoft ?DLLs ?
?
?
創建一個cab文件: ?
cabarc ?N ?ctrl1.cab ?ctrl1.inf ?ctrl1.dll ?
N表示要創建一個新的文件,ctrl1.cab是創建的文件名,ctrl1.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。 ?
然后就可以將cab文件放到網頁上了 ?
<OBJECT ?ID="Ctrl1Obj" ?
? ? ? ? ? ? ? ?CLASSID="clsid:....................................." ?
? ? ? ? ? ? ? ?CODEBASE="http://server.com/ctrl1.cab#version=8,0,0,5007"> ?
</OBJECT> ?
這里也在一個version,不過這里的version是指控件的version,而inf里的是文件的version。 ?
?
?
制作電子簽名: ?
首先從下面的網址下載制作簽名的工具SignCode,地址是 ?
http://msdn.microsoft.com/workshop/gallery/tools/authenticode/authcode.asp ?
從簽名授權中心如VeriSign或者你的局域網上運行的Microsoft ?Certificate ? ?
Server授權服務器得到一個certificate,在申請授權的過程你會得到一個私鑰。 ?
也可以使用MakeCert.exe和Cert2Spc.exe創建的私鑰進行測試,方法是首先使用MakeCert創建一個X.509的certificate(.cer文件) ?
? ? ? ?MakeCert ?-sv ?MyKey.pvk ?n ?"CN=My ?Software ?Company" ?MyCert.cer ?
然后利用Cert2Spc將.cer文件轉換成為PKCS ?#7軟件發布Certificate(.spc文件), ?
? ? ? ?Cert2Spc ?MyCert.cer ?MyCert.spc ?
利用你下載的SignCode對你的cab文件進行電子簽名 ?
? ? ? ?SignCode ?-spc ?MyCert.spc ?-v ?MyKey.pvk ?-t ?http:// ?
? ? ? ? ? ? ? ?timestamp.verisign.com/scripts/timstamp.dll ?ctrl1.cab ?
SignCode還可以指定一些其它的參數,就不說了,太長了,哧哧。 ?
雖然可以利用測試的.cer和.spc文件,但是在發布的時候,必須申請。 ?
?
其實東西在SDK中都有說明,不過都是E文的,慢慢看.
轉載于:https://www.cnblogs.com/hehe520/archive/2004/11/06/6330147.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 德里达逝世了!
- 下一篇: 参加Sun公司的新产品的发布会议