这台机器装的是 Windows 10。系统更新安装到最后几步,进度条停住,随后提示失败并回滚。回到设置页,那条更新没有装上;打开详细信息,错误代码一行:0x80070005。
之后在这台机器上安装 VC++ 运行库、.NET 组件、DirectX 或某个硬件驱动,凡是需要往系统里写组件的安装包,也可能撞出同一个代码。
0x80070005 直译是四个字:拒绝访问。但当前账户确实是管理员,UAC 弹窗也点了「是」,为什么还会被拒绝?
原因不在登录身份,而在写入身份。Windows 安装更新和组件时,不是由表面这个管理员身份直接去写系统,它背后要动两类东西:系统文件和注册表项。这两类里有很多位置默认归系统级账户 TrustedInstaller 管理,普通管理员默认只有读权限,没有写权限。正常流程下,更新程序会借用系统服务自己的身份完成写入,不应该撞上 0x80070005;一旦链路里某个环节出问题——注册表子项权限被改坏、被锁定,或者继承关系断开——写入就会被拦下来,整个安装流程回滚,报错面板只留下一个错误码。
所以修这个错,顺序比命令更重要:先把注册表权限被拒这个最常见的门解决掉,再处理系统文件。不要一上来就埋头跑各种修复命令。
动手前先做两件准备。一是临时关闭第三方杀毒软件和安全管家的实时防护。这类软件拦截注册表写入和系统文件修改很常见,不关掉,后面几步容易越修越乱。二是右键开始菜单,以管理员身份打开 Windows PowerShell 或命令提示符。下文凡是说打开命令行的,默认都是这个身份。

0x80070005 在注册表里最常见的落点,是 Component Based Servicing(下称 CBS)项。它记录系统组件和更新的装载状态,更新安装、组件安装都会写它,默认所有者是 TrustedInstaller。这一项的权限链路只要断掉一环,0x80070005 就会在更新或组件安装时冒出来。
把下面这行路径粘贴到注册表编辑器地址栏,回车定位:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing
左侧选中 Component Based Servicing,点菜单「文件」→「导出」,保存成一个 .reg 文件放到桌面。这一步不要跳过,后面如果改出问题,双击该文件即可恢复。
右键 Component Based Servicing,选择「权限」,再点「高级」。依次核对两处:
如果高级安全设置窗口里显示继承被禁用,先点「启用继承」,把继承下来的权限补回来,再点「确定」。

如果所有者不是 TrustedInstaller 或 SYSTEM,一般可以在同一个窗口顶部点「更改」,输入 TrustedInstaller,点「检查名称」,确认后勾选「替换子容器和对象的所有者」,应用并确定。
注册表权限窗口信息密度高,不建议在里面做太多临时发挥。网上有些教程让人直接给 Everyone 加「完全控制」,不要照搬——那等于把这个节点的写权限开放给所有账户,口子开得太大。窗口里某个操作拿不准,先取消退出,确认桌面的 .reg 备份还在,再继续。
注册表这一层处理完,重启一次,再回去试更新。如果还是 0x80070005,进入第二步处理系统文件。
系统文件这边的两条命令是固定搭配,顺序不能反:先修组件存储,再扫描系统文件。第一条会从 Windows 更新拉取正常文件来修补受损的组件存储,需要联网,耗时也比较久;第一条跑完再跑第二条,第二条负责检查并修复系统文件的完整性。
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow两条都跑完,重启。如果 sfc 的结果里写了「找到损坏文件但无法修复」,不用急着试别的方法:回到上一步把 DISM 再跑一遍,然后重新执行一次 sfc /scannow,多数情况下能修复完整。
如果只有 Windows 设置里的系统更新会失败,安装其他软件都正常,错误通常还有一类专属原因:更新客户端一直记着上次失败留下的残留状态,每次重试都基于这个状态进行。处理方法是把更新服务和更新缓存一起重置一遍。
负责更新缓存的 SoftwareDistribution 和 catroot2 这两个文件夹都可以安全重命名,系统会自动重建。以管理员身份打开命令行,一次执行下面这些命令:
net stop wuauserv
net stop cryptSvc
net stop bits
net stop msiserver
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start wuauserv
net start cryptSvc
net start bits
net start msiserver执行之前,先去服务管理器里看一眼:Windows Update、后台智能传输服务、加密服务、Windows Installer 这几个服务的启动类型,不要处于「禁用」。有人遇到更新服务启动不了,多半是启动类型被某些优化工具改过,设回非禁用状态再手动启动即可。
如果 ren 那两步提示目录被占用,说明相关进程没有完全退出,重启进入安全模式再重跑一遍。
如果你最初失败的是某个硬件驱动安装,更新缓存重置不一定是刚需,但驱动这边的处理要做。打开设备管理器,找到对应设备,右键卸载设备,勾选「删除此设备的驱动程序软件」,然后重启,再安装驱动。
驱动装到一半被 0x80070005 弹开,很多时候是旧驱动没有卸干净,新组件写不进对应的注册表键。
0x80070005 不一定是本机设置造成的。公司或学校统一配置的电脑,账户权限被策略管住,更新和组件安装会直接以这个错误码收场。判断方式很直接:先看旁边同事是不是同样报错。是的话,去找管理员处理;不是,再回来看上面的排查步骤。
把上面的步骤收拢成一张顺序表:
0x80070005 只告诉你写入被拒,不告诉你是哪扇门锁着。把锁住的门一扇扇找出来,执行顺序比任何一条「万能命令」都重要。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。