尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DirectX修复工具也搞不定?C++运行库“创建失败”手动修复全攻略

DirectX修复工具也搞不定?C++运行库“创建失败”手动修复全攻略 DirectX修复工具使用技巧之二C运行库“创建失败”手动修复全记录如果你常年在各种游戏、专业软件和系统维护之间周旋你大概率遇到过这种场景某个软件双击打开弹窗报错红叉一个上面写着“无法启动此程序因为计算机中丢失xxx.dll”又或者干脆是“安装失败”“创建失败”。这时候你第一反应是打开DirectX修复工具扫一遍修复一遍然后自信满满地重新打开软件结果错误还挂在屏幕上像贴了强力胶一样。尤其是C运行时组件报“创建失败”的时候DirectX修复工具默认的自动修复模式经常压不住这个问题需要手动介入。这篇东西就是写这个的当DirectX修复工具自动修复搞不定的“C创建失败”出现时怎么一步步手动把文件救回来。基于我在几台故障机上反复折腾的经验把排查链路、卸载清理、静默重装、验证方法全部捋一遍适合那些想真正解决问题而不是只会一键修复的人。1. “创建失败”四个字背后的真相C运行库是怎么被搞坏的先说结论C运行库就是Visual C Redistributable是很多程序运行的地基而“创建失败”这个报错本质上是系统在加载或注册这些动态链接库DLL的时候某个环节出了问题导致程序进程没法被正确创建。DirectX修复工具能处理大部分DLL缺失、文件损坏的问题但遇到安装状态异常、注册表残留、多个版本互相覆盖这类情况单靠自动修复往往不够。1.1 为什么DirectX修复工具也会翻车很多人把DirectX修复工具当成万能药双击、扫描、修复完事。这没问题日常场景里百分之七八十的C报错它都能镇住。但“创建失败”这个错误不同它不是单纯某个DLL文件没了而是整个运行库的运行环境处于一个坏掉的状态。坏掉的原因我总结下来有这么几类多个版本的Visual C运行库互相冲突。比如2005、2008、2010、2013、2015-2022混装某个版本升级覆盖了另一个版本的公共组件导致依赖单一版本的程序起不来。软件卸载不干净注册表里残留了CLSID、App Paths或者Add/Remove Programs的余项Windows Installer认为某个版本已经装好了实际文件又不在或不在正确的位置。非正常关机、杀毒软件半路拦截、Windows更新中途断电导致运行库的安装事务没有提交注册表里记录的是“半成品”状态。某些“精简版”Ghost系统或优化软件把vcredist相关的安装日志、缓存和注册表信息删了导致后续安装或修复被阻塞。DirectX修复工具本身的设计思路是扫描并修补DLL文件、注册表关联它擅长的是“文件缺失”类问题。但如果问题出在Windows Installer的事务状态上自动修复就会陷入一个循环检测发现某些C组件注册异常尝试修复结果因为安装源不可用、版本状态冲突修复动作根本落不了地最终呈现出来的就是你看到的那句“创建失败”。1.2 手动修复前必须先搞清楚的事在动手卸载和重装之前有一个很重要的认知需要建立Visual C运行库是一整个家族不是单一个体。版本对应安装包常见用途VC 2005vcredist_x86.exe / vcredist_x64.exe老游戏、工控软件VC 2008vcredist_x86.exe / vcredist_x64.exe部分老版Office插件VC 2010vcredist_x86.exe / vcredist_x64.exe2012年前后的游戏VC 2012vcredist_x86.exe / vcredist_x64.exe部分Unity3D程序VC 2013vcredist_x86.exe / vcredist_x64.exeUE4早期项目VC 2015-2022vc_redist.x86.exe / vc_redist.x64.exe绝大多数现代软件注意2015、2017、2019、2022这几个版本共用同一套二进制文件所以微软统一用“2015-2022”来发布安装高版本的会覆盖低版本的同架构运行库。x86和x64是两套独立的东西64位系统上最好两个都装因为32位程序需要x86版本的运行库。手动修复的步骤不是一上来就卸载而是先判断到底哪一层出了问题。先去检查DirectX修复工具的日志看它扫描出来的问题条目再去事件查看器找一下系统日志里有没有安装服务相关的错误记录最后去注册表看一眼VC版本列表的现状。把这些搞清楚了再决定是只重装其中一个版本还是全部清掉重来。2. 定位损坏组件三步找出该修谁“创建失败”这个报错看似一刀切但背后对应的组件可能完全不同。我有一次遇到的报错是某个老软件提示创建失败按通用思路把所有VC全部卸掉重装折腾了两小时问题依旧最后发现是2005版x86运行库的一处注册表项损坏单独修那一个就解决了。所以定位这一步花多少时间都值。2.1 第一步看DirectX修复工具的日志DirectX修复工具运行完一轮之后会在主界面显示“检测到异常”之类的提示但具体哪些文件异常需要看日志。日志位置一般在工具安装目录下的Log文件夹里文件名类似于DXRepair.log。打开日志之后重点找这几类关键词CreateFile失败说明某个DLL文件路径无法访问可能是文件被占用或目录权限异常。注册失败说明regsvr32注册环节出错常见于文件版本和系统不匹配。拒绝访问多半是UAC权限不够或者杀毒软件锁了文件。日志里会明确列出是哪个版本的VC组件有问题比如Microsoft.VC90.CRT是2008版Microsoft.VC100.CRT是2010版Microsoft.VC140.CRT是2015到2022版。记录下这些信息后面你就知道该针对哪个版本下手了。2.2 第二步事件查看器里的系统日志线索很多人忽略事件查看器其实这个工具能省你很多时间。按WinR输入eventvwr.msc打开事件查看器展开“Windows日志”下的“应用程序”找“错误”级别的事件。如果你看到的错误源是MsiInstaller或者.NET Runtime展开详情里面通常会写明是哪个产品、哪个版本的Installer在安装或卸载时失败了。比如事件ID为1023或11708之类的记录后面往往跟着产品名称像是Microsoft Visual C 2015 Redistributable (x64)。这些信息能精确到具体版本号比日志更清楚。顺带提一句如果事件查看器里全是“Windows Installer记录了一个事务安装完成”之后马上又出现“回滚”说明这个版本的运行库处于一个反复安装失败的循环里通常需要先彻底清理再重新安装直接点修复是没用的。2.3 第三步注册表里摸清VC版本分布打开注册表编辑器WinR输入regedit定位到以下两个路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\X86这两个路径下可以看到Installed值如果为1表示已安装。注意WOW6432Node下的才是32位组件在64位系统中的真实安装位置别找错了。还有一个更直观的方法打开“控制面板 - 程序和功能”找到Visual C那一列看一下到底装了几个版本。如果这里显示一个2015-2022 x64已经装了但是事件查看器和日志里又宣称它没装好那基本可以确定注册表信息和实际文件状态不一致这就要走下面的手动修复流程了。3. 手动修复实操卸载、清扫、重装一条龙定位完成确认是哪几个版本的C运行库处于损坏状态接下来就是动真格的了。这一步很多人直接选择“全部卸载再全部重装”我不建议这么干原因很简单有些老软件就依赖某个特定版本的运行库你全卸了万一新装不回去软件直接就废了。正确做法是精准处理哪个坏了弄哪个除非你确认系统里所有VC版本都坏干净了。3.1 卸载残留组件的正确姿势先从“程序和功能”里找到对应的版本右键卸载。一般来说2015-2022的版本支持正常卸载2005到2013这些老版本有些会提示“已停止支持”或卸载界面一闪而过这时候用命令行方式处理更稳妥。用管理员权限打开命令提示符输入wmic product where name like %Visual C 2015% call uninstall这种方法会调用Windows Installer执行卸载。但wmic命令有个缺点速度慢而且可能把所有匹配到的产品都卸了所以name后面的关键字一定要写准。我建议用MsiExec.exe配合卸载程序代码来操作。先在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下找到对应版本的UninstallString里面有类似{0D3E9E15-DE7A-300A-12F1-B392F4039B2E}这样的ProductCode然后执行MsiExec.exe /x {0D3E9E15-DE7A-300A-12F1-B392F4039B2E} /quiet /norestart这样做的好处是定向卸载不会误伤其他版本。如果提示“无法找到安装产品”说明Windows Installer的登记信息已经坏了那就直接在注册表Uninstall项里删掉这个版本的残留条目然后手动删除对应文件夹继续下面的步骤。3.2 清理注册表与残留文件夹卸载完成后系统里可能还留着垃圾。两个地方要检查一是C:\Windows\System32和C:\Windows\SysWOW64下的msvcr*.dll、msvcp*.dll和vcruntime*.dll这些是运行库的核心文件二是C:\Program Files (x86)\Common Files\Microsoft Shared\VC下的文件夹。清理注册表的时候重点找这四处HKEY_CLASSES_ROOT\Installer\Products这里藏着所有已安装产品的注册信息如果程序没卸干净这里会有对应的条目。删除时要小心先搜索产品名定位。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall卸载列表残留条目会导致控制面板显示异常。HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies这个键下面的条目对应VC依赖关系Registry数据里通常能看到Microsoft.VC140.CRT之类的描述删掉对应损坏版本的键值。HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\Installer\Dependencies32位组件的依赖注册千万别漏了。注册表操作前务必备份。在regedit里右键导出就能搞定嫌麻烦的话至少记下你删了哪些键万一搞错还能恢复。特别注意Installer\Products下的键是用ProductCode的哈希值命名的一眼看不出是哪款软件建议先搜索关键字定位不要看着像就是。3.3 重新安装Visual C Redistributable清扫干净之后进入重装环节。安装包去哪下微软官网的“Visual C Redistributable最新支持下载”页面是首选。也有很多人直接丢给你一个集成了所有版本的安装包合集方便是方便但这类第三方包偶尔会夹带私货为了安全起见我从来都是去微软官网或正规镜像站拿官方安装包。有两个容易被忽略的细节第一2005、2008、2010这些老版本的运行库在Windows 10/11上安装时会提示“安装程序检测到另一个程序正在运行请等待”这不是程序真在运行而是Windows Installer服务没缓过来。打开任务管理器找到msiexec.exe进程如果可以就结束与安装相关的那几个或者等几分钟再试。如果一直卡住直接重启系统再装。第二安装顺序有讲究。微软官方的建议是先装旧的再装新的。实际测试下来2005、2008、2010这批老版本之间没有明显的覆盖冲突但如果你先装了2015-2022再回去装老版本有极小概率导致新版运行库的向后兼容组件被覆盖成老版本。稳妥的做法是统一从2015-2022的重装开始再把老版本按年份逐个补上。3.4 装不上怎么办命令行静默安装与强制覆盖有些情况下安装包双击之后毫无反应或者闪一下就没影了这是“创建失败”问题的另一个变体安装程序自己都起不来。这时候需要用命令行方式强制安装。以2015-2022版为例管理员权限打开命令提示符进入安装包所在目录执行vc_redist.x64.exe /install /quiet /norestart/quiet参数表示静默安装不出界面/norestart表示装完不自动重启。如果想看到安装进度把/quiet换成/passive会显示进度条但不需要手动操作。装完之后怎么确认成功去事件查看器看有没有MsiInstaller的“成功安装”事件或者再打开DirectX修复工具跑一遍扫描它显示“未发现异常”就是过了。还有一个笨办法去控制面板看版本号是否出现在列表里。如果是老版本的运行库静默安装参数略有不同。2005、2008版的参数是/qb显示基础UI但不让用户交互和/qn完全静默vcredist_x86.exe /qb /norestart这里要特别提醒一句静默安装不是万能的如果安装包的缓存被清理工具删过Windows Installer可能报“找不到源文件”这时候需要先修复Windows Installer服务本身。方法很粗暴但有效重新启动Windows Installer服务服务名是msiserver并确保SoftwareDistribution文件夹没有被设置为只读。如果某个版本的运行库始终装不上无论静默还是交互都报错还有一种“曲线救国”的办法提取安装包里的DLL文件手动注册。用管理员权限命令提示符执行msiexec /a vc_redist.x64.exe /qb TARGETDIRC:\VCRedist这会把安装包里的文件解压到指定目录然后进入C:\VCRedist找到System64或System32目录把DLL文件复制到系统的System32或SysWOW64目录下再用regsvr32注册。这个方法能绕过安装流程直接补齐文件但治标不治本——注册表信息可能不完整后续某些软件检查版本号时依旧会误判。所以该重装的时候别偷懒走这个捷径。4. 修复之后验证、后续维护与老系统特例修完了不是终点。如果你只是把某个版本的运行库装回去就完事那这文章算白写了。真正要命的问题是装回去之后系统里其他依赖同一运行库的程序是否还能正常工作下次会不会又复现“创建失败”4.1 如何确认C运行库已修复除了控制面板里看到版本号之外推荐用DLL查询命令验证核心文件是否就位。管理员权限打开命令提示符执行dir /s C:\Windows\System32\msvcp140.dll如果文件存在且版本不低于你安装包的版本号说明该架构的2015-2022运行库文件正常。再检查一下SysWOW64目录dir /s C:\Windows\SysWOW64\msvcp140.dll同样的方法可以检查2010版的msvcp100.dll、2013版的msvcp120.dll。如果文件存在但控制面板里没有安装记录用regsvr32重新注册一下相关文件或者干脆卸了重装。还有一个更直观的验证方式直接运行之前报错的程序。如果程序能正常打开说明修复成功如果报错变了比如从“创建失败”变成“缺少其他DLL”说明还有别的组件存在隐患继续回到第2章的排查流程。4.2 直接修复之外的辅助手段手动修复C运行库的过程里我发现很多“创建失败”其实不只是C组件的问题而是系统基础环境的连带反应。最典型的两个一是.NET Framework的版本不匹配。某些VC组件在安装后会调用.NET服务如果.NET版本过旧或被其他软件破坏运行库安装程序会报错回滚。这时候先把.NET Framework更新到系统支持的最高版本再去装C运行库成功率会高很多。二是系统证书和根证书过期或损坏。现代Windows Installer会验证安装包的数字签名如果证书链不完整安装程序可能静默失败。更新系统时间、运行Windows Update或者强制刷新证书列表往往能解掉这个“隐藏Boss”。右键安装包选“属性”如果能看到“数字签名”选项卡说明证书解析正常如果选项卡直接消失证书服务的故障就比较明显了。另外杀毒软件的实时防护有时会把VC运行库的DLL文件当成可疑文件隔离掉。修复完成后建议打开杀毒软件的隔离区看有没有msvcr*.dll、vcruntime*.dll之类的文件被关进去。有的话直接恢复并添加信任不然你这边刚修完杀毒软件后脚就把文件又办了。4.3 老系统里的“创建失败”特例如果你还在用Windows 7或者更老的系统手动修复C运行库的坑位又多两个。第一个坑Windows 7提示“创建失败”的很多情况下真正缺的是KB2533623这个补丁。这个补丁为老系统提供了API Set Schema支持很多新版本CRT依赖这个机制。不装它就算你能把2015-2022运行库装上去程序照样起不来。而且这个补丁属于安全更新有时候不会自动打上需要手动到更新目录里下载。第二个坑老系统上装2015-2022运行库如果提示“Setup Failed”或“0x80240017”多半是系统缺少UCRTUniversal C Runtime组件。这个组件在Windows 10中是内置的但在Windows 7上需要单独安装。微软有个专门的更新包KB2999226装上之后大部分UCRT相关的问题就能解决。顺带说一个操作系统层面的分类运行库在64位系统上既要装x64版本的运行库也别忘了x86版本。很多32位老软件跑在64位系统上依赖的是x86版本运行库。你说你系统是64位的把64位运行库装了结果32位程序还是报创建失败去装一下x86版的运行库问题就此消失——这个情况我在网上见了无数次属于经典中的经典。检查方法很简单控制面板的已安装程序列表里看有没有带“(x86)”字样的VC版本。5. 个人经验关于手动修复C运行库的几条提醒这个部分不是理论是几台机器一点点试出来的经验。有几个被忽略的小细节影响范围很大。第一别过度清理注册表。很多人修完运行库顺手用各种“系统优化”工具把注册表里的重复项、无效项一锅端。这些工具的识别逻辑比较粗糙有时会把VC运行库的正常注册项当垃圾扫掉。我见过最惨的一台机器被清理工具扫完之后所有VC组件全部失效进控制面板连卸载入口都没了最后只能重装系统。所以修运行库的周期里尽量别碰第三方清理工具。第二日志是最好的“破案线索”。遇到反复修复失败的机器别急着反复重装多翻翻DirectX修复工具的日志和Windows事件查看器。很多问题的答案早就写在日志里了只是没人愿意花时间看。尤其是那种“修复一次能撑几天然后又挂回去”的周期性故障日志里往往能看出是什么程序在反复覆盖或删除关键DLL。第三重装系统实在不行就上。这句话听起来像是废话但确实是最终兜底方案。如果你按上面的流程走完一遍所有VC组件都能正常安装DirectX修复工具扫描也显示健康程序依然“创建失败”那问题可能出在系统DLL层级的深层损坏或者驱动冲突上。与其继续无休止地排查不如重装一遍系统再用修复工具打底效率往往更高。最后再给一个个人偏好装完所有运行库后我把vcredist安装包统一放到一个固定文件夹里存起来按年份和架构分好类。以后重装系统或者给同事修机器时直接从这个文件夹拷出去就行不用再在微软官网翻来翻去找旧版本。这个习惯帮我省了不少时间你也可以试试。
返回列表