修复:在 Windows 上找不到引用的程序集错误 (0x80073701)

Jacki

在运行 Windows 10/11 的 Windows Server 或台式计算机上添加或删除功能/角色时,您可能会遇到错误:

The referenced assembly could not be found. Error: 0x80073701.

尝试使用 PowerShell(在本例中为 WSL)添加可选 Windows 功能时会出现类似的错误:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Enable-WindowsOptionalFeature : The referenced assembly could not be found.

此错误意味着 Windows 映像中指定组件的源文件丢失或损坏。

在进行故障排除之前,请检查是否有需要主机重新启动(状态为“待重新启动”)的更新。

dism /online /get-packages /format:table | Select-String "Pending"

如果安装任何组件或软件包后需要重新启动,请执行此操作。

在某些情况下,即使多次重新启动后,某些软件包仍处于待重新启动状态。尝试重命名C:WindowsWinsxs待处理.xml文件复制到 Pending.xml.old,然后重新启动主机。

然后,使用 DISM 验证 Windows 映像的完整性:

DISM /Online /Cleanup-Image /CheckHealth

如果此命令返回“组件存储可修复”,请修复它:

DISM /Online /Cleanup-Image /RestoreHealth

然后,检查Windows系统文件的完整性,并根据需要进行修复(修复后的组件将作为原始文件的来源):

sfc /scannow

如果恢复系统文件后仍未安装 Windows 功能,请检查%windir%LogsCBSCBS.log对于错误。

推荐阅读:如何修复 Windows Installer 错误 1603:安装过程中出现致命错误

我的 Windows Server 2022 主机上的 CBS 日志显示错误,指示之前安装的 KB5012170 更新中缺少系统文件。

CBS Failed to pin deployment while resolving Update: Package_for_KB5012170~31bf3856ad364e35~amd64~~20348.880.1.1from file: (null) [HRESULT = 0x80073701 – ERROR_SXS_ASSEMBLY_MISSING]

在这种情况下,请从 Microsoft 更新目录手动下载并安装指定的 Windows 更新。

如果无法从 MSU 文件安装更新,请提取 MSU 文件并手动将 CAB 更新包添加到 Windows 映像:

解压 MSU 包:

expand -f:* windows10.0-kb5012170-x64 c:temp

将包添加到在线 Windows 映像:

DISM.exe /Online /Add-Package /PackagePath:c:TempWindows10.0-KB5012170-x64.cab

如果该软件包无法下载或者更新不适用于您的 Windows 版本,您可以将 Windows 配置为忽略损坏的软件包

!!!以下说明不属于 Microsoft 官方指南。请自行承担风险,并了解这可能会导致 Windows 映像完全失败。在进行任何更改之前,我们建议您备份 Windows 映像或创建系统还原点。

  1. 转到注册表项HKLMSOFTWAREMicrosoftWindowsCurrentVersionComponent Based Servicing
  2. 让您的帐户成为此注册表项的所有者(默认所有者是TrustedInstaller)并授予自己完全控制权限。
  3. 找到包含您要忽略的更新包的注册表项。
  4. 改变值当前状态参数为0。这会通知 Windows 服务进程该组件既未安装也未启用。在我的示例中,包状态的先前值是112(已安装),所以我将其更改为0(不存在)。
  5. 恢复注册表项的原始权限,只为管理员保留只读访问权限。
  6. 重新启动计算机并确认现在可以成功添加 Windows 功能(角色)

如果 CBS 日志显示ERROR_SXS_ASSEMBLY_MISSING对于多个 KB 包,请对每个包执行上述步骤。可以通过使用 Select-String cmdlet 搜索文件来列出 CBS.LOG 中存在 ASSEMBLY MISSING 错误的所有包:

Select-String -Path "c:windowslogscbscbs.log" -Pattern "Failed to pin"

如果这不能解决问题,请尝试使用适用于您的操作系统版本的最新版本的安装 ISO 映像对当前 Windows 版本执行就地升级。从 Windows 安装映像运行 setup.exe 并选择保留个人文件和应用程序选择更新模式时。