WinXP提示正常运行Windows所需的文件已被替换成无法识别版本怎么办?( 二 )


关于WFP值得关注的一点是它和Windows安装程序结合的很紧密 。无论何时,如果Windows安装程序需要安装一个受保护的文件,它就把这个文件交给WFP,而不是自己试图去安装这个文件 。然后由WFP判断是否允许安装 。
系统文件检查
虽然自动文件替换会节省时间,但也存在需要手动干预的情况 。例如,你可能不愿意空等着WFP去判断受保护的文件是否已经被替换 。幸运的是,你可以用一个名为系统文件检查(SFC)的工具手动控制WFP 。
SFC是一个命令行工具,需要在命令提示符窗口下运行 。它的语法像这样:SFC [/SCANNOW] [/SCANONCE] [/SCANBOOT] [/REVERT] [/PURGECACHE] [/CACHESIZE=x] /SCANNOW选项通知SFC立即扫描所有受保护的系统文件 。如果在扫描过程中发现一个错误的文件版本,这个错误的版本将被替换为微软正确的版本 。当然,这意味着你可能必须有Windows安装CD,最新的服务包或者升级补丁 。
/SCANONCE参数通知WFP在系统下次启动的时候扫描受保护的系统文件 。在扫描过程中,任何错误的文件将被正确的版本替换 。正如这个参数名的意思,这个扫描只进行一次 。之后的系统启动将恢复正常,SFC不再运行 。
/SCANBOOT参数和/SCANONCE选项类似 。区别在于SCANONCE只在Windows下次启动时扫描受保护的文件,而SCANBOOT参数则在Windows每次启动时都扫描系统文件 。如果需要,这两个参数将替换错误的系统文件,这可能需要你提供正确文件版本的拷贝 。
/REVERT选项用来关闭SFC,例如,假设你使用SCANBOOT选项在每次系统启动的时候扫描所以保护的文件 。正如你所能想到的,这确实会增加计算机启动的总时间 。最后,你可能厌倦了漫长的启动时间,想关闭SFC 。只需要简单的使用SFC /REVERT,就可以在启动的时候关闭SFC 。
对/PURGECACHE选项就需要谨慎些 。在这之前,我解释说Windows使用一个缓存文件夹来保存各类系统文件正确版本的备份 。如果你运行SFC /PURGECACHE命令,那么这个文件缓存将被清空,那些备份文件将被删除 。这个命令还会导致Windows开始扫描各类受保护文件,并在扫描的同时重建这个文件缓存 。当然,这可能意味着你必须向Windows提供Windows安装CD或系统文件升级的拷贝 。
最后一个SFC命令选项是/CACHESIZE=x 。对于文件缓存的缺省大小确实存在很多自相矛盾的信息,在写这篇文章的时候,我发现三篇不同的微软知识库文章中指定的文件缓存的缺省大小都不一样 。一篇文章中建议文件缓存的大小为50 MB,而另一篇建议的大小却是300 MB 。更有甚者,第三篇指出这个大小应该是无限的 。其实缺省值的大小并不重要,因为你可以根据你的需要,使用CACHESIZE选项来改变这个文件缓存的大小 。
在使用CACHESIZE选项时,你必须键入命令SFC /CACHESIZE=x,这个x是指你想分配给文件缓存的兆字节数 。在指定了新的文件缓存大小后,你必须重启系统并运行SFC /PURGECACHE命令 。
通过注册表控制WFP和SFC
在这之前,我解释说注册表控制WFP的一般行为 。你可以修改几个不同的注册表键值以控制WFP的行为 。你可以在每次运行SFC直接操作这些键的一部分,其他一些有更低级别的功能 。比如指定文件缓存或者安装文件的位置 。
修改注册表可能是危险的 。如果你做了一个错误的修改,可能会导致Windows的崩溃或者破坏你的应用程序,所以我强烈建议在尝试这一节中描述的任何技术之前,先对注册表做一个完整的备份 。
为了访问SFC的注册表键,在Run命令中键入REFEDIT命令 。这将打开注册表编辑器,现在浏览注册表树找到下面这个键: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinLogon 通常地,注册表中WinLogon键一般用来控制各种不同的启动选项 。虽然许多SFC的选项都可控制SFC是否在启动的的时候运行,但微软已经将SFC相关的注册表键放在这个部分 。

推荐阅读