概要
如果更新过程无法访问所需的文件、文件夹或注册表项,则会发生Windows 更新错误0x80070005 (E_ACCESSDENIED)。 此错误通常表示影响Windows组件存储、软件分发文件夹或相关系统资源的权限问题。
本文提供了在受支持的 Windows 客户端版本、Windows Server和Microsoft Azure 虚拟机(VM)上解决此问题的步骤。
现象
您安装了一个 Windows 更新,但安装失败,并显示错误代码 0x80070005 (E_ACCESSDENIED)。
若要获取详细信息,请查看以下资源:
- 查看WindowsUpdate.log文件或CBS.log文件。 查找类似于以下示例的条目:
Error CBS Failed to create file. [HRESULT = 0x80070005 - E_ACCESSDENIED]
Error CBS Failed to internally open package. [HRESULT = 0x80070005 - E_ACCESSDENIED]
- 查看Windows 更新日志。 若要生成日志文件的静态副本,请打开Windows PowerShell 命令提示符窗口,然后运行以下 cmdlet:
Get-WindowsUpdateLog
在输出中搜索 0x80070005 条目。 有关日志文件的详细信息,请参阅 Windows 更新 日志文件。
原因
如果存在以下条件之一,则会发生此错误:
- TrustedInstaller 服务帐户对 %windir%\WinSxS 文件夹或 %windir%\SoftwareDistribution 文件夹没有权限。
- 注册表子项
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing的权限不正确。 - 第三方防病毒或安全功能工具锁定了与更新相关的文件或文件夹。
- SYSTEM 帐户对 %windir% 文件夹没有完全控制权限。
- 组策略设置或管理代理限制对系统目录的写入访问权限。
注释
%windir% 表示Windows系统文件夹。 默认文件夹名称和位置为“C:\Windows”。
解决方案
重要
在解决此问题之前,请备份操作系统的磁盘。 有关 VM 此过程的信息,请参阅 “关于 Azure 虚拟机还原”。
步骤 1:重置对组件存储的权限
若要重置对Windows组件存储的默认权限,请打开管理命令提示符窗口,然后运行以下命令:
icacls "%windir%\WinSxS" /reset /t /c /q
icacls "%windir%\SoftwareDistribution" /reset /t /c /q
运行这些命令后,请重新启动计算机,然后重试安装更新。 如果更新仍未安装,请转到步骤 2。
步骤 2:确保 TrustedInstaller 拥有 WinSxS 文件夹
若要指定 TrustedInstaller 帐户拥有 WinSxS 文件夹,请在命令提示符处运行以下命令:
icacls "%windir%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t /c /q
运行这些命令后,请重新启动计算机,然后重试安装更新。 如果更新仍未安装,请转到步骤 3。
步骤 3:重置Windows 更新组件
如果错误仍然存在,请重置所有Windows 更新组件。 在命令提示符处运行以下命令:
net stop wuauserv
net stop bits
net stop cryptSvc
ren %windir%\SoftwareDistribution SoftwareDistribution.old
ren %windir%\System32\catroot2 catroot2.old
net start cryptSvc
net start bits
net start wuauserv
运行这些命令后,请重新启动计算机,然后重试安装更新。 如果更新仍未安装,请转到步骤 4。
步骤 4:修复组件存储
若要修复组件存储,请在命令提示符处运行以下命令:
DISM /Online /Cleanup-Image /RestoreHealth
注释
默认情况下,DISM 使用Windows 更新作为修复源。 有关如何指定其他修复源的信息,请参阅 恢复Windows映像。
运行此命令后,请重新启动计算机,然后重试安装更新。 如果更新仍未安装,请转到步骤 5。
步骤 5:检查系统文件完整性
若要验证系统文件的完整性,请在命令提示符处运行以下命令:
sfc /scannow
如果此命令标识问题,请参阅 “使用系统文件检查器”工具修复缺失或损坏的系统文件。
命令成功完成后,请重新启动计算机。 请重试安装更新。 如果它仍然未安装,请转到步骤 6。
步骤 6:检查第三方干扰
若要确保第三方应用程序或驱动程序不会干扰更新过程,请执行以下步骤:
-
在受影响的计算机上,暂时禁用实时防病毒保护。
-
若要列出文件系统筛选器驱动程序,请在命令提示符处运行以下命令:
fltmc -
如果列表包含非Microsoft筛选器驱动程序,请运行以下命令暂时卸载它:
fltmc unload <DriverName>注释
在此命令中, <DriverName> 表示命令列出的
fltmc驱动程序的名称。 -
工具完成后,重启计算机,然后重试安装更新。 如果更新仍未安装,请执行下列操作之一:
- 如果列表包含多个非Microsoft筛选器驱动程序,请重复
fltmc unload命令以卸载其中每个驱动程序,然后重试安装更新。 - 如果受影响的计算机是 VM,请转到步骤 7。
- 请联系 Microsoft 支持寻求帮助。
- 如果列表包含多个非Microsoft筛选器驱动程序,请重复
步骤 7:使用“运行命令重置”工具(Azure)
如果前面的步骤无法解决Azure VM 上的问题,请尝试 Azure VM Windows 更新重置工具。 可以使用 Operations>Run 命令直接从 VM 的Azure门户页运行该工具。 使用此方法时,无需登录到 VM。
此工具重置Windows 更新服务堆栈。 此操作在更新代理中清除与内存相关的锁状态。
运行该工具后,请重试安装更新。 如果更新仍未安装,请转到步骤 8。
步骤 8:使用修复虚拟机(Azure)
如果重置工具无法解决问题,或者 VM 无法启动:
-
将受影响的操作系统磁盘附加到修复 VM。
-
若要重置对Windows组件存储的默认权限,请打开管理命令提示符窗口,然后运行以下命令:
icacls "%windir%\WinSxS" /reset /t /c /q icacls "%windir%\SoftwareDistribution" /reset /t /c /q -
若要指定 TrustedInstaller 帐户拥有 WinSxS 文件夹,请在命令提示符处运行以下命令:
icacls "%windir%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t /c /q -
请确保具有可用的脱机操作系统映像,然后在命令提示符处运行以下命令:
DISM /Image:<Drive>:\ /Cleanup-Image /RestoreHealth注释
- 在此命令中, <驱动器> 表示受影响操作系统磁盘的驱动器号。
- 默认情况下,DISM 使用Windows 更新作为修复源。 有关如何指定其他修复源的信息,请参阅 恢复Windows映像。
-
若要确保第三方应用程序或驱动程序不会干扰更新过程,请执行以下步骤:
-
在受影响的计算机上,暂时禁用实时防病毒保护。
-
若要列出文件系统筛选器驱动程序,请在命令提示符处运行以下命令:
fltmc -
如果列表包含非Microsoft筛选器驱动程序,请为列表中的每个非Microsoft驱动程序运行以下命令,暂时卸载这些驱动程序:
fltmc unload <DriverName>注释
在此命令中, <DriverName> 表示命令列出的
fltmc驱动程序的名称。
-
-
将修复的磁盘重新附加到原始 VM。
-
请重试安装更新。 如果更新仍未安装,请联系Microsoft 支持部门以获取帮助。