如何修复 Win11 上未知 DLL 中 WSL.exe 突然损坏并出现错误 0x80040154

如何修复 Win11 上未知 DLL 中 WSL.exe 突然损坏并出现错误 0x80040154

我正在运行 Windows 11(版本 22H2 内部版本 22621.1485),并且自从 WSL1 和 WSL2 发布以来,一直在使用几个 Ubuntu 发行版(WSL1 是 Win 10)。

在最近重新启动 Windows 后(原因不明,可能是强制更新)。我发现即使是简单使用 WSL.exe 也会失败。只有语法解析和帮助似乎有效。例如 wsl --help 有效,但 wsl --list 失败:

Class not registered
Error code: Wsl/0x80040154

错误代码通常与“错误代码 Windows Subsystem for Linux 可选组件未启用。请启用它并重试。”相关。但该子系统从未被禁用过。例如,如以下代码片段所示

PS C:\Users\GrayG> wsl --list
Class not registered
Error code: Wsl/0x80040154
PS C:\Users\GrayG> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux                                                         

Path          :
Online        : True
RestartNeeded : False

PS C:\Users\GrayG> wsl --list
Class not registered
Error code: Wsl/0x80040154  

我曾尝试使用古老的“依赖遍历器”实用程序(http://www.dependencywalker.com/) 来尝试发现这是否基本上是由于 DLL 突然损坏造成的。但 walker 似乎永远无法完成对依赖关系树的分析。

为了修复该应用程序,我尝试使用 Windows 设置:应用程序 > 已安装的应用程序 > 适用于 Linux 的 Windows 子系统,并在重置标题下请求“修复”。这似乎不起作用。

我不知道该尝试修复什么,只能想着可能需要重新安装 wsl.exe。但是,这样做似乎没有办法,否则我宝贵的 Ubuntu 映像也会丢失。此外,我知道的唯一“保存”这些映像的方法 wsl --export 因显而易见的原因不可用:

PS C:\Users\GrayG> wsl --export Ubuntu-20.04 c:\WSL-Export-Ubuntu-20.04.tar
Class not registered
Error code: Wsl/0x80040154

即使我准备好丢失这些图像,我也找不到重新安装 WSL 的安全方法,因为第一步(例如完全重新安装 WSL) 是使用 wsl.exe 来卸载单个发行版。

也许我应该尝试设置:应用程序 > 已安装的应用程序 > Windows Subsystem for Linux“卸载”。但在探索其他选项之前,我还没有准备好尝试这个。

安装新 WSL 的老方法 - 获取 wsl_update_x64.exe 版本(https://learn.microsoft.com/en-gb/windows/wsl/install) 是一条死胡同,因为它指的是 WSL 的旧版本(因此运行它只会通知您已安装了更高版本的 WSL)。

有谁能帮忙:

  • 诊断“类未注册”消息的来源
  • 帮助找到修复 Wsl/0x80040154 错误的方法(假设 WSL 已启用)
  • 演示如何在没有运行 WSL.exe 命令的情况下重新安装 WSL

如果可以的话,我将非常感激。

答案1

我已经找到了此问题的解决方案,它可能适用于恢复任何 WSL.exe 包损坏。

该方法基本上是重新安装早期版本的 WSL 包,然后再次更新到当前版本。

它不涉及任何现有虚拟机的丢失 - 它只是修复了 wsl.exe 的损坏版本。

要查找不同年龄的包裹,请执行:

wsl --release-notes

或者直接前往 https://github.com/microsoft/WSL/releases

下载“当前”包(您可以使用“wsl --version”找到其版本),然后下载旧包。

您无法更新到当前包,但您可以重新安装旧包(只需从资源管理器运行它)。

一旦您有了旧版本,您就可以按照相同的方式重新安装新版本。

(这彻底解决了我的问题。)

答案2

WSL 最近对我所在组织的多个用户(包括我自己)停止工作,并产生了意外的错误代码。对我有用的方法是wsl --update重新启动 Windows。

答案3

微软文章 排除 Windows 子系统(适用于 Linux)故障 说:

Windows 更新后出现“错误:0x80040154”

Windows 更新期间可能会禁用 Windows Subsystem for Linux 功能。如果发生这种情况,必须重新启用 Windows 功能。有关启用 Windows Subsystem for Linux 的说明,请参阅手动安装指南

安装指南建议如下:

以管理员身份打开 PowerShell(开始菜单 > PowerShell > 右键单击​​ > 以管理员身份运行)并输入此命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

(这在 CMD 中也同样有效。)

相关内容