根据系统文件检查器 (sfc) 文档sfc 将遵循某些程序来确定系统文件是否损坏。
- 如果 sfc 发现受保护的文件已被覆盖,它会从文件夹中检索文件的正确版本
%systemroot%\system32\dllcache
,然后替换不正确的文件。 - 如果
%systemroot%\system32\dllcache
文件夹损坏或无法使用,请使用sfc /scannow
、sfc /scanonce
或sfc /scanboot
修复目录的内容Dllcache
。
这看上去似乎矛盾。
dllcache
如果 sfc 使用它作为比较来查找损坏的系统文件,那么它如何知道它已损坏?dllcache
如果sfc 使用该目录作为备份存储,它将如何修复该目录?- sfc 通常如何检查损坏情况?我一直认为它根据目录对系统文件进行了哈希检查,
dllcache
但前面两个语句似乎表明并非如此。
答案1
Sfc 不会修复 dllcache,而是借助 dllcache 修复其他 dll 文件。如果 sfc.exe 发现问题,它将尝试从 DLL 缓存 (%WinDir%\System32\Dllcache) 中替换有问题的文件。如果文件不在 DLL 缓存中或 DLL 缓存已损坏,系统将提示用户插入 Windows 安装媒体或提供网络安装路径。系统文件检查器根据注册表值 SourcePath 和 ServicePackSourcePath 确定 Windows 安装源路径。如果这些值设置不正确,即使用户提供了安装媒体,它也可能会继续提示用户提供安装媒体。
来源微软
答案2
SFC 使用包含所有受保护文件签名的目录文件。DLLCache 中的文件不用于直接比较。它们也会根据签名进行检查。
当文件缓存不可用或与目录中的签名不匹配时,SFC 使用预配置的网络路径或请求 Windows 安装媒体。
SFC 使用目录文件与两个位置的签名进行比较。