我正在运行 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 中也同样有效。)