VB製作CAB包過程

使用VB自帶的打包工具。自動生成inf文件,並和工程所依賴的dll文件一起打包成cab文件。步驟如下

1. File->Make active.dll, 這一步生成我們自己的dll文件

2. 打包
開始->程序->MS Visual Studio6.0-> MS Visual Studio6.0 Tools -> Package & Deployment Wizard,
select project:
點package按鈕
Packaging script: Internet 包 1
Package Type: Internet Package
Package Folder: g:\activex\package
Included Files: active.dll, mwrf32.dll, VB6 Runtime and OLE Automation
File source: 均選擇Include in this cab
Safety settings: 均選擇yes
Finish

3. 修改INF文件(VB生成的inf文件總是有問題,需要自己手動更改)
修改G:\activex\package\Support\active.INF,將其中如下這段
[mwrf32.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=
FileVersion=0,0,0,0
改爲
[mwrf32.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=0,0,0,0

因爲active.dll依賴於第三方的mwrf32.dll
所以需要將INF文件中所有mwrf32.dll文件的位置和active.dll互換一下,即所依賴的dll文件要放在前面
(爲什麼要這樣?本文最後有說明)

[Add.Code]
active.dll=active.dll
mwrf32.dll=mwrf32.dll
msvbvm60.dll=msvbvm60.dll
需要改成
[Add.Code]
mwrf32.dll=mwrf32.dll
active.dll=active.dll
msvbvm60.dll=msvbvm60.dll
保存


4. 通過BAT文件生成active.CAB包,以使剛纔的修改生效
方法:點active.BAT,生成active.CAB包

5. 使用
把生成的active.HTM中的代碼拷貝出來,放到JSP中。
<OBJECT ID="Class1"
CLASSID="CLSID:46962673-204E-44FF-A566-2266493927A1"
CODEBASE="active.CAB#version=1,0,0,0">
</OBJECT>
把active.CAB放在和JSP相同的目錄下。

打開JSP頁面,如果ActiveX能正常安裝,會在C:\WINDOWS\Downloaded Program Files下生成一個Class1的文件。右鍵->屬性就可以看到這個Class1文件中包括了哪些dll文件以及這些文件是不是按照inf文件的配置正確安裝到系統目錄下了

如果ActiveX不能正常安裝,需要先把IE安全級別設爲“低”。

 

第二部分:相關的打包工具收集

1. Setup Factory7.0破解漢化版下載
http://hlbr.onlinedown.net/files2/HAP_SetupFactory7-LDR&WestKing.exe
這個工具好像只能生成exe格式的應用程序,不過操作十分簡便而且功能也很豐富。
用它製作安裝程序應該很牛逼了

2. InstallShield Package For the WEB
http://download.pcpop.com/Down/47752.html
這個工具可以用來打包CAB文件,不過CAB文件中要包含哪些dll文件完全由自己來決定,即它不能根據VB工程智能檢測需要依賴哪些dll文件。

第三部分:CAB包中inf文件的編寫

如果要詳細瞭解cab中的inf文件怎麼編寫,可以參考
http://www.80diy.com/home/20010702/16/178624.html, 我就不整理了,直接拷貝到這裏備用:
<--! 引用
    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。   
    
    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章