“$hf_mig$”目录到底可删与否——关于GDR与QEF的区别
- 作者: Alexis, 微软MVP
- 来源: 微软中文技术社区
我一直也困惑于“$hf_mig$”到底是否可以删除,目录内的文件看起来就像Windows更新文件的备份。但是这样的话,“WINDOWS\SoftwareDistribution\Download\”这个目录岂不是作用与它雷同了?以前虽然也删除过,也并未发现有什么异常,但是这个疑问还是一直没有挥去。不过这位MVP的解释,似乎比较合理。
我们平时为Windows XP安装补丁的时候,经常会看到补丁中出现GDR或QEF等字样,它们表示什么意思呢?原来微软已经为补丁中的更新系统文件划分了级别,其中GDR表示“普通分发版本”,而QEF则表示“快速修补工程更新版本”,其中GDR更新文件一般都进行了大量的严格测试,因此补丁的稳定性相对较高;而QEF更新文件一般所做的测试相对较少,因此其稳定性普遍不如GDR。
由于更新文件划分了级别,因此Windows补丁也划分为两类:一类称为“安全修补程序”,这类补丁包同时包含GDR和QEF版本的更新文件,也就是两个副本,一般在Windows被发现严重漏洞时发布关键更新使用;第二类称为“修复程序”,一般都是一些非关键性更新,仅包含QEF版本的更新文件。
那么为什么“安全修补程序”要包含两种更新文件的版本呢?比如说我们现在要安装一个仅包含QEF版文件的非关键性更新。如果这个补丁需要更新的旧系统文件已经是GDR版,这时更新程序就会自动对比新旧文件的版本号。假如原先的GDR文件版本比补丁包中的QEF文件版本还要高,那么就会自动禁止补丁包中的QEF文件进行更新,而会改用和原GDR文件版本号相同的QEF版文件来更新。那么上哪里去找这个和原GDR文件版本号相同的QEF文件呢?实际这个文件已经在计算机硬盘里了,因为在上一次安装包含这个GDR文件的“安全修补程序”时,已经将同版本的QEF也复制到了系统中备用。这就是为什么“安全修补程序”要同时包含GDR和QEF两个副本的原因。
再举一个例子,比如说我们现在要安装KB896688补丁,此补丁需要更新系统文件“%SystemRoot%\system32\MSHTML.DLL”。由于KB89668补丁是一个“安全修补程序”,因此它同时包含GDR版和QEF版两个版本的MSHTML.DLL副本,它们的文件说明分别为“xpsp_sp2_gdr.051004-1415”和“xpsp.051004-1419”。执行更新程序后,安装程序会自动检测当前系统的MSHTML.DLL版本,如果发现原来的文件就是GDR版,那么就会用补丁包中的GDR版来更新;如果发现原来的文件是QEF版,则会用补丁包中的QEF版来更新。不论是哪种情况,更新完毕后,新的系统文件都将是更新后的6.00.2900.2769新版本号,只不过有GDR和QEF之分而已。
现在,我们再用KB896688的例子回过头说一说刚才提到的第一个例子。假设我们更新KB896688补丁之前,原系统文件MSHTML.DLL已经是GDR版,那么在更新补丁时,就会用GDR版的xpsp_sp2_gdr.051004-1415版的MSHTML.DLL进行更新。与此同时,更新程序会将那个xpsp.051004-1419的QEF文件复制到硬盘中,具体位置是“Windows\$hf_mig$\”下的子文件夹。假设我们日后需要安装一个也需要修改MSHTML.DLL的其它非关键性补丁,这个补丁就会自动检测自己提供的QEF文件和xpsp_sp2_gdr.051004-1415相比哪个版本高。假如自己提供的QEF版本还不如xpsp_sp2_gdr.051004-1415版本高的话,就不会用自己的QEF文件进行更新,而是会从“Windows\$hf_mig$\”里把那个备用的xpsp.051004-1419拿出来,进行更新。
记得在新闻组中曾经有人问起“Windows\$hf_mig$\”文件夹是否可以删除的问题。现在经过上面的说明解释后就应该明白了,最好不要随便删除“Windows\$hf_mig$\”文件夹。删除此文件夹虽然不会引起系统立即崩溃,但是一旦出现上面所说的那种情况,就可能会发生安装新补丁后引起系统文件版本不匹配导致的兼容性问题。所以,不要轻易删除“Windows\$hf_mig$\”文件夹。
You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.