封装部署新观点
作者:sonys
现在的封装部署技术已经基本稳定。说一下自己的一些体会:
1.电源判断:最完美的还是使用VISTA的NTLDR提供的 “/detecthal” 接口来判断。理由是:系统启动到加载内核阶段就[会加载HAL.DLL的。在加载内核阶段,ntldr加载称为Windows XP内核的ntokrnl.exe。系统加载了Windows XP内核但是没有将它初始化。接着ntldr加载硬件抽象层(HAL,hal.dll)。当然在封装时将“计算机”更改为“standard PC”也是不必要的。启动到加载内核阶段,VISTA的NTLDR会利用“/detecthal” 接口来自己选择最合适的HAL。因而再事先去更改成“standard PC”,基本没啥好处的。只要在SYSPREP后删除HAL相关的注册表项,使用VISTA的NTLDR提供的“/detecthal”就会生效。附上一个自动删除HAL的例子,这个例子是AU3脚本。
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL\PNP0C08 [4]")
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL\PNP0C08\0 [4]")
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL\PNP0C08\0\Control [4]")
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL\PNP0C08\0\LogConf [4]")
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL [4]")
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL\0000 [4]")
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL\0000\Control [4]")
FileWriteLine(@SystemDir&"\hdjK.ini","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL\0000\LogConf [4]")
FileWriteLine(@SystemDir&"\hdjK.cmd","regini.exe hdjK.ini")
FileWriteLine(@SystemDir&"\hdjK.cmd","del hdjK.ini")
FileWriteLine(@SystemDir&"\hdjK.cmd","del %0")
RunWait("hdjK.cmd",@SystemDir,@SW_HIDE)
RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL\PNP0C08")
RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL")
如果不删除HAL的注册表项,就算是使用VISTA的NTLDR会利用“/detecthal” 也不会自动更新电源模式的。但是删除HAL的注册表项,只要在sysprep.inf中有UpdateInstalledDrivers=Yes 这项,所有即插即用驱动都会被更新。