大家好,又见面了,我是你们的朋友全栈君。
最后更新于 2019-2-24
问题描述
近日接连接到一些用户的反馈,说他们在使用DirectX修复工具的时候,所有文件的状态均为修复失败或者下载失败(如下图)。虽然他们使用的是标准版或增强版而非在线修复版,程序还是会尝试下载需要的DirectX组件。
注:由于我无法复现此现象,因此此图片来自网络截图。所有权归原上传者所有。
之后他们也都按照程序的提示以安全模式启动系统,但是结果仍然是全部失败或下载失败。部分人尝试上网寻找解决办法,但是发现不管是百度还是各种论坛都没有人能给他们一个满意的解决办法。
经过我从网上各种渠道的了解,此问题虽然是小概率事件(目测不足1%),但是在各个系统均有零星出现,从Windows 7,Windows 8一直到最新的Windows 10均存在。并且,不管使用哪个版本的DirectX修复工具(从V1.2版到V3.7版),在他们的电脑上也都会出现此问题。
排查这个问题花费了很长的时间,因为这些问题在我的电脑上均不复现,只有在极个别电脑上出现。经过我对几个用户进行了远程查看后,终于发现了产生问题的原因。
DirectX修复工具为了保障用户修复的安全性,会调用系统组件进行文件校验。如果系统中的这些系统组件恰好存在异常,则会造成程序校验失败,导致给出的结论是所有文件均失败或下载失败。当然这个结论也是不正确的。
解决方法
虽然产生问题的原因很难确定,但是解决此问题却十分地简单。在本程序的“工具”菜单下的“选项”对话框里,有一个选项为“安全级别”(如下图):
程序默认的选项为“高”。“高”安全级别的意思是,程序将调用系统核心组件进行安全校验。如果此时系统核心组件有问题,自然是会修复失败。这时只要将“安全级别”更改为“低”,并确定即可。“低”安全级别时,程序将会使用内建的校验算法来进行安全校验,绕过了系统组件存在异常的问题,此时再进行修复自然也就可以修复成功了。
当更改完模式再次修复时,将不会再次出现所有文件均失败的情况,可能只是某些文件异常或丢失。程序通过正常的步骤进行修复,修复后即可解决绝大部分0xc000007b以及DirectX异常造成的错误。
编后语
由于造成此现象的原因不在程序内部,而是某些个别系统,因此想要通过修改程序来实现避免此问题比较棘手。同时,由于这是小概率事件,在我周边的电脑都没有出现过类似的问题,定位到具体哪个系统核心组件异常也比较困难。近期,我针对此问题也做了一些专项研究,大致定位了问题所在。由于这个问题在我的电脑上不复现,我无法测试效果,因此在这里希望出现这个问题的玩家帮助我进行测试。请大家下载我提供的Hash Verification哈希值校验工具,运行校验工具,然后对DirectX Repair.exe文件进行哈希校验。请将计算出的哈希值截图(如不会截图请手机拍照),并通过电子邮件将截图(或照片)传给我以供研究。在此,我对愿意帮我测试的用户深表感谢,对那些被修复失败提示所困扰的用户深表歉意。
翻看网上的帖子,最早出现这个问题可能要追溯到几年前。但是由于不复现的原因一直也无法解决。在这里我也感谢那些愿意付出时间让我进行远程调试的朋友。要不是你们的协助,此问题很会继续发生下去。
最后,我也对所有用户的理解与支持深表感谢。
总结
使用DirectX修复工具时,发现所有文件的状态均为修复失败或者下载失败,可以通过在DirectX修复工具的选项菜单里将“安全级别”调为“低”来避免此问题。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133215.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...