一种比较理想的解决办法是制作一个预装了各种Service Pack、Hotfix的Windows安装盘,然后用这种天生安全的安装盘安装Windows,安装好之后不必再另行安装Service Pack、Hotfix,从而实现Service Pack、Hotfix的一体化安装。遗憾的是,微软提供的这方面的工具很少,而且近期似乎不打算提供适当的工具来支持本文讨论的一体化安装。不过,只要借助于第三方工具,同时运用一些经验和技巧,我们还是可以手工制作出安全的Windows安装盘。
但必须指出的是:本文不是为那些想要偷懒或胆小的用户写作的。特别地,为Windows安装盘加载Hotfix的过程极其繁琐,而且微软有可能在将来的某一天突然更改其补丁安装策略,使本文介绍的操作方式不再有效。不过,如果你需要安装大量的Windows系统,本文介绍的办法值得一试。
一、准备安装文件
安装Win 2K/XP的方式很多,如网络安装、无人值守安装、磁盘克隆等,但有一种方式微软至今尚未直接支持,那就是定制可启动的安装CD——它可以作为其他安装方式的基础,非常实用。第一步是创建一个Windows的发布目录,将它作为可启动安装CD的源目录,为保证文件的完整性,应当严格确保该目录的安全。
以Win 2K为例,首先将Win 2K安装CD的所有内容复制到硬盘上的发布目录。通常,安装CD上有许多文件根本不会用到,为了给其他工具、Service Pack、Hotfix留出空间,最好将这些不用的文件和目录删除。
一般而言,删除下列文件和目录不会带来任何问题:\bootdisk,\setuptxt,\support,\valueadd,read1st.txt,以及readme.doc。如果Windows安装盘只用于全新安装,不用于升级,还可以安全地删除下列文件和目录:\i386\win9xmig,\i386\win9xupg,\i386\winntupg,autorun.inf,以及setup.exe。另外,常用的小软件也可以直接放入Windows安装盘,例如,我们可以为Windows安装盘创建一个存放常用软件的\software目录、一个存放更新文件的\updates目录。
二、加载Service Pack
将Service Pack直接集成到Windows安装文件的好处很多,例如,Service Pack将成为Windows安装文件密不可分的一部分,安装好Windows以后如果要添加或删除某些组件,系统将自动使用经过Service Pack更新后的文件,而不是原始安装盘上的文件。
当然,这种安装方式也有其缺点,这就是Service Pack不可卸载——所以如果有必要,首先应当确认一下安装Service Pack之后应用软件仍能正常运行。
首先从微软网站下载一份最新的Service Pack(例如,Service Pack 4,即SP4),执行w2ksp4.exe -s:
三、加载Hotfix
微软官方不支持将Hotfix加载到Windows安装文件,通常,当我们添加或重新安装了一个Windows组件(例如IIS),就必须重新安装所有的Hotfix,确保所有文件都是最新的。之所以如此,原因就在于添加组件时,安装程序会分析安装配置文件(.inf文件),据此确定从哪里获取当前安装的组件所需的文件。
如果我们安装的是Service Pack,.inf文件会指向Service Pack提供的更新后的文件;但如果安装一个Hotfix,.inf文件不会被更新,因此,如果要将Hotfix加载到Windows安装文件,必须手工修改.inf文件。
首先创建一个临时目录,将最新Service Pack之后发布的所有Hotfix下载到该目录。接着,重命名所有Hotfix文件,使之符合8.3命名规范(这是安装程序的要求):打开一个命令窗口,转到存放Hotfix的临时目录,执行命令:ren *.* ???????.*。该命令运行完毕后,Hotfix文件的名字就变成了8.3格式,例如q318593_w2k_sp3_x86_en.exe将变成q318593.exe。
接下来解压缩所有Hotfix。从命令窗口中,执行:for %i in (q*.exe) do start /wait %i /x。按下Enter键之后,命令行上出现类如“C:\> start /wait q318593.exe /x”的提示,同时弹出一个窗口,要求指定一个目录来存放解压缩得到的文件。根据hotfix的编号指定目录名称,例如“\q318593”,点击“确定”。对每一个hotfix重复执行同样的操作。
现在要开始把hotfix的文件复制到发布目录了。不过,在命令行窗口中,首先转到发布目录的i386子目录,执行expand -r *.in_,把所有压缩的.inf文件解开,以便随后修改。接下来,从最早的hotfix开始,把每一个文件复制到发布目录下的i386目录,除hotfix.exe、hotfix.inf、spmsg.dll、spuninst.exe和svcpack1.dll之外的所有文件都要复制。不过,有时\symbols和\update这两个目录也可以忽略,只是必须注意下面将会论及的例外情况。
复制好文件之后,删除\i386目录之内相应的压缩版本。例如,如果复制了kernel32.exe文件,则删除对应的压缩版本kernel32.ex_文件。删除压缩版的文件之后,安装程序就不得不使用非压缩版了。如果\i386目录下没有对应的压缩版文件,则需要设法找出原始文件的位置——这就是我们要解开.inf文件的原因。
在命令窗口中使用Find命令,或者使用资源管理器的查找功能,搜索所有.inf文件查找刚才复制的文件的名字。例如,假设把一个admin.dll文件复制到了\i386目录,但\i386目录之内却找不到对应的压缩文件admin.dl_,那就搜索所有.inf文件查找“admin.dll”。找到的结果可能有一个以上,不过我们要找的文件应当包含一行类如“admin.dll=1,,20540”的内容。
经检查,这行内容位于fp40ext.inf文件的[SourceDisksFiles]小节。第一个数字(这里是1)是磁盘的编号,由同一.inf文件的[SourceDisksNames]小节定义。磁盘ID通常指向Win 2K的安装CD、Service Pack安装目录,或者.cab压缩文件。打开fp40ext.inf文件,可以看到类如图一所示的内容。
图一
检查前面提到的包含admin.dll的行,可以发现磁盘ID指向了fp40ext.cab文件。不过,由于我们刚刚将新的admin.dll文件复制到了\i386目录,所以要修改这个位置。
首先,在[SourceDisksNames](注意,它可能叫做SourceDisksNames.x86)节创建一个新的位置,即加入下面这行内容:0=%SERVICEPACK_NAME%,"",0,%34000%。注意该.inf文件只包含一个磁盘ID,它指向fp40ext.cab文件。在某些.inf文件中,你可能会发现已经有了一行类似的内容,如果这行内容已经存在,那就不必再加,直接进入下一步。
找到包含admin.dll的这行内容,把原来的“admin.dll=1,,20540”改成“admin.dll=0,,20540”。现在,当安装程序搜索admin.dll文件,它将寻找主发布目录(磁盘ID是0),而不是原来的.cab文件(磁盘ID是1)。对于每一个在\i386目录下没有相应压缩版的文件,按照上述步骤执行类似的修改——这个过程已经很复杂了,不过下面还有更麻烦的。
某些与IIS、SMTP、NNTP服务相关的文件在.cab文件中有不同的名字,通常是在原文件名字的基础上稍作变化,例如,mailmsg.dll在ims.cab文件中变成了smtp_mailmsg.dll,在ins.cab文件中变成了nntp_mailmsg.dll。如果搜索.inf文件寻找引用了mailmsg.dll的地方,不会有任何结果,但可以找到引用了smtp_mailmsg.dll和nntp_mailmsg.dll的地方。虽然系统更改文件名字的方式不存在严格、明确的规则,不过也不是随心所欲,不存在文件名字和原始文件毫无关联的情况。
遇到这类文件名字变异的情况时,首先在\i386目录下复制一份文件(例如mailmsg.dll),更改该文件的名字,使其与.inf文件中出现的名字相同。然后,在[SourceDisksFiles]节找到对该文件的引用,按照前面的说明把磁盘ID改成指向新的位置。
有一类文件无法在\i386目录或任何.cab文件中找到,这就是编目文件(Catalog File)。编目文件的扩展名是.cat,用于管理驱动程序的签名信息,例如sp3.cat文件包含了经过WHQL测试的驱动程序文件的校验和。微软每次更新了一个驱动程序,都会发布一个新的编目文件。
仔细观察一下就可以发现,每一个Hotfix要么包含一个新的sp3.cat文件(或者,对于SP4基础上的hotfix,则是sp4.cat),要么包含一个根据Hotfix的编号命名的编目文件。因此,复制sp3.cat(或sp4.cat)文件时,必须使用该文件的最新版本。由于编目文件的内容是不断累积的,所以最新、最大的文件就是我们要用的文件。把最新的编目文件复制到\i386目录下,然后记下文件的名字,稍后还要用到。
接下来,在发布目录的根目录之下创建一个\$OEM$\$$\hotfixes目录,把Hotfix的安装程序复制到该目录。注意该目录和\i386位于同一个目录层次,而不象某些微软文档提到的那样属于\i386的子目录。当我们运行安装程序时,系统会把\hotfixes目录复制到\%systemroot%目录(例如,C:\winnt\hotfixes目录)。把所有Hotfix复制到该目录之后,从http://support.microsoft.com/default.aspx?scid=kb;en-us;q296861下载qchain.exe,并把它保存到同一目录。
最后一步是修改svcpack.inf文件,使其包含类如图二的内容,在[ProductCatalogsToInstall]小节中,修改清单内容,加入以前复制到\i386目录的所有编目文件。
图二
只要按照上面的步骤正确操作,现在发布目录下的Windows安装文件应该已经加载了最新的Service Pack和Hotfix了。如果用这些安装文件来添加或重新安装Windows组件,安装完成后不必另行安装Service Pack和Hotfix。
四、编写Winnt.sif
在需要高度安全的场合,安装Win 2K/XP时最好先用最小安装方式安装,然后依次加入各种必要的组件和服务。例如,如果要配置一个Web服务器,首先用最小方式安装一个Windows,然后加入IIS Web服务,让IIS服务正常运行起来并采取必要的安全保障措施,在此基础上再添加其他需要的服务,如SMTP和DNS服务,每次添加一个。
用全新安装方式安装Windows时,安装程序要用到一个特殊的文件,即winnt.sif文件。winnt.sif其实与unattend.txt文件一样,两者除了文件名字不同之外,另一个不同之处是winnt.sif存放在\i386目录下,而且它是自动起作用的,即使从CD-ROM启动并开始安装也一样。要精简Windows自动安装的可选组件,关键就是要修改winnt.sif的[Components]小节,在这里禁止安装所有多余的组件,修改方法如图三所示。
图三
前面我们只复制了hotfix的文件,但没有修改注册表,有些工具(例如Windows Update)可能报告Hotfix还没有安装。为避免这类问题,确保系统正确安装了Hotfix,除了直接复制Hotfix文件之外,还必须在安装期间运行Hotfix的安装过程,而运行Hotfix安装过程的最好办法就是利用winnt.sif文件的[GuiRunOnce]小节。
由于我们把所有Hotfix复制到了\%systemroot%\hotfixes目录,因此现在要从该目录运行Hotfix的安装程序。图四显示了一个配置[GuiRunOnce]小节的实例。
图四
注意[GuiRunOnce]小节的最后调用了qchain.exe,它保证了在安装多个Hotfix的时候,不管各个Hotfix是以什么次序安装,系统总是复制了正确的文件。
现在,我们已经成功地把Service Pack和Hotfix加载到了Windows安装文件,接下来就可以利用发布目录中的安装文件安装Windows了。虽然这个过程看起来极其繁琐,不一定对谁都适用,但如果你经常需要安装/重装Windows,一份天生安全的安装CD是必不可少的。
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有0条评论>>