目的:一個打包檔包含32位元、64位元driver。
範例為讓打包檔可以安裝Vista(32、64bit)、Winodows7(32、64bit)。想法是把64bit、32bit的資料用Feature區分,再到OnFirstUIBefore判斷要安裝的是64bit或32bit的Feature.
1. 建立兩個Feature,分別為System32bit、System64bit。區分系統位元,以方便之後的控管。
2. 分別建立Components,在這Components區分特定的系統下要安裝什麼。
3. 在Components的屬性的Condition設定系統條件。主要是用條件來決定哪一個系統下要安裝時資料。以下為系統的條件
Vista32:VersionNT=600 AND WindowsBuild >5600
Win7_32:VersionNT=601
Vista64:VersionNT64=600 AND WindowsBuild >5600
Vista64_inf:VersionNT64=600 AND WindowsBuild >5600
Win7_64:VersionNT64=601
Win7_64inf:VersionNT64=601
4. Vista64_inf、Win7_64inf的路徑請設定到[WindowsFolder]inf。
這個作法主要是讓driver直接安裝到\Windows\inf下,因為當硬體要裝driver時,系統是在這個路徑下尋找有無適合的driver。
5. 分別放入各系統的driver。
範例:32bit的driver檔名為UsbDriver.inf、UsbDriver.sys
64bit的driver檔名為UsbDriver.inf、UsbDriver.sys、UsbDriver64.cat
Vista64、Vista64_inf放入相同的資料。Win7_64、Win7_64inf也是放入相同的資料。
同上
Vista64、Vista64_inf放入相同的資料。Win7_64、Win7_64inf也是放入相同的資料。
6. 在OnFirstUIAfter中加入下面程式,先尋找有無UsbDriver.INF,如無
示未此安裝檔未支援該系統;如有就讓32bit的driver執行一下。
STRING szProgram,szCmdLine;
begin
Disable(STATUSEX);
szProgram = "rundll32.exe";
if (FindFile (INSTALLDIR, " UsbDriver.INF ", svResult) < 0) then
MessageBox ("未支援此系統", SEVERE);
else
if(!SYSINFO.bIsWow64) then
//非64bit
szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132 "+INSTALLDIR^" UsbDriver.INF ";
LaunchAppAndWait(szProgram, szCmdLine, LAAW_OPTION_WAIT);
endif;
endif;
7. 在OnFirstUIBefore
Dlg_SetupType:
szTitle = "";
szMsg = "";
nResult = SetupType(szTitle, szMsg, "", nSetupType, 0); 下加入下面程式,用程式來控制是要安裝哪一個位元的driver,當SYSINFO.bIsWow64判斷是64bit時,把System32bit的Feature勾選取消;如不是64bit則把System32bit的Feature勾選取消
if(SYSINFO.bIsWow64) then
FeatureSelectItem ( MEDIA,"System32bit" ,FALSE );
else
FeatureSelectItem ( MEDIA,"System64bit" ,FALSE );
endif;
8. 按Complie,再Release就完成了打包檔