我使用 安装了 WSL wsl --install
,但现在要迁移到 Windows 10 20H2,我想更新 WSL(例如使用 GUI 应用程序),但使用 运行wsl --update
失败
PS C:\WINDOWS\system32> wsl --update
Checking for updates...
Error: 0x8024500c
如果无法访问 Windows 应用商店,有人知道该如何更新 WSL 吗?我使用的是公司笔记本电脑,因此无法更新。
答案1
重要更新: 这个答案已经过时了。我保留了历史答案,但大多数用户应该阅读我更新后的答案了解最新(和更重要)的信息。
wsl --update
在 Windows 10 中仅有的更新 WSL2核心,而不是 WSL 本身。这实际上不会添加任何新的 WSL“功能”,例如 GUI 支持。唯一纯粹通过更新内核启用的新功能是 USB/IP 支持。
在 Windows 10 中,WSL 版本(至少目前)锁定在 Windows 版本上。由于 Windows 11 已经发布,我们真的不确定未来的 Windows 10 版本是否会收到新的 WSL 更新。我看到的一些迹象表明 22H2 Windows 10 的变化很小,但我们还不知道。
要使用 WSLg 运行 GUI 应用程序,您必须升级到 Windows 11。微软明确表示,他们不太可能将此功能带回 Windows 10。
或者,您可以使用第三方 X 服务器或 XRDP,如这个问题。
请注意发布Windows 11 上的 WSLwsl --update
行为相同 - 它仅更新内核。但是,微软提供了“Windows Subsystem for Linux Preview”,仅供 Windows 11 用户在 Microsoft Store 中使用。
此 WSL 版本是独立于 Windows 版本进行更新,因此 Microsoft(和用户)可以比一年一次的 Windows 周期更频繁地尝试新功能和修复。
在里面预览版本,一个wsl --update
将要更新到最新的 WSL 预览版本。
将 WSL 作为 Store 应用运行存在一些限制,因此我不清楚微软是否能够解决这些问题,或者预览版是否仍将保持“快速发布”渠道,而 Windows 更新每年都会获得一次“稳定”版本。目前还不清楚微软是否能够在任何时候将 Store 版本带回 Windows 10,但这似乎不太可能。
Error: 0x8024500c
该错误表示联系 Microsoft Store 时出现问题,因此内核更新功能很可能使用 Store(或至少是 UWP 交付)机制。如果您无法通过 Store 更新,则可能无法使用--update
两者。
不过,在 Windows 10 下还有其他几种方法可以更新 WSL2 内核:
如果您的组织已设置,“更新 Windows 时接收其他 Microsoft 产品的更新”选项(在设置->Windows更新->先进的设置)将在最新的 WSL2 内核版本可用时自动获取它。
如果您的用户权限不包括商店,我假设您无权自行更改此设置。这通常是 IT 管理的设置。
您可以尝试直接
.msi
从微软根据WSL 页面的“手动安装”。请注意,如果你无法直接运行安装程序,你仍然可以从中提取内核
.msi
并通过以下方式指向它.wslconfig
(请参阅这里进行kernel
设置)。如果其他方法都失败了,你可以从Microsoft GitHub 存储库
.wslconfig
,构建它,然后通过(按照前一个选项)指向它。(插入强制性的,“在我的时代,我们必须为每个设备变化构建内核......上坡......双向。”)
答案2
这个问题背后原本存在两个问题:
- WSLg 用于运行 Linux GUI 应用程序,当时仅适用于 Windows 11。
- 当时
wsl --update
仅更新内核版本,而不是 WSL 本身。
这两个问题在最新的 WSL 版本中都发生了变化,但如何在没有 Store 访问权限的情况下更新 WSL 的核心问题仍然是更多的今天比当时更重要:
WSL 现在作为应用程序提供,而不是像当时那样作为 Windows 功能提供。
Windows 10 用户现在可以访问此应用程序(以及因此的 WSLg 功能)
WSL 应用程序的默认交付机制是...商店。这就是为什么在没有商店访问权限的情况下了解如何安装或更新它比以往任何时候都更加重要。
Windows 10 上的 WSLg:先决条件
首先,要在 Windows 10 上安装最新的 WSL(无论是否使用应用商店),您需要使用 2311 或更高版本的 Windows UBR(更新版本)。这是 Windows 版本号的最后 4 位数字,例如(对于 Windows 10 22H2),我认为这表示每月的服务版本。您可以通过在 PowerShell 中19045.2311
运行来确定 UBR 。(Get-ComputerInfo).WindowsUBR
如果您运行的 UBR 低于 2311,这可能是暂时的情况,但目前,您可以通过以下方式升级:
完全更新 Windows 10
即将设置->Windows 更新->检查更新并按下检查更新按钮。
您应该会看到“2022-11 适用于基于 x64 的系统的 Windows 10 版本 22H2 的累积更新预览 (KB5020030)”作为可选更新可用。
安装后按照提示重新启动。
安装完成后,WSL 在 Windows 10 和 Windows 11 22H2 下的行为应该相同。
我预计未来不会有太大的需求,但如果你恰好使用的是 Windows 10 或 11 的旧版本,目前无法进行上述更新,请参阅我的原始答案。
“正常”商店行为
而之前只是内核更新似乎使用了商店(如原始答案中所述),最新的 WSL 版本本身现在作为应用程序从Microsoft Store。如果您wsl --install
使用的是最新的 Windows 10(如上所述更新)或 Windows 11(22H2)版本,则将默认为您安装 Store 版本(除非您--inbox
也故意指定该选项)。
Windows 11 21H2 用户也可以直接使用 Store 页面或上述方法升级到 Store 版本。之后,wsl --update
将适用于未来的更新。
无需通过商店安装/更新
但是,由于您明确表示不能使用商店,因此您可能需要使用替代的手动包安装机制:
从以下位置下载最新的 WSL 应用包版本WSL 版本Github repo 中的页面。
重新启动(以确保 WSL 根本没有被使用)。一个简单的
wsl --shutdown
可能工作,但通常不会。启动管理员 PowerShell 并:
Add-AppxPackage <path.to>/Microsoft.WSL_1.0.0.0_x64_ARM64.msixbundle wsl --version # to confirm
当然,请将包名称调整为您下载的最新版本。
重新启动(不是绝对必要的,但我有一两个功能在安装后直到完全重新启动后才能 100% 正常工作——我现在不记得它们是什么了)。
WSLg(以及所有其他 WSL 功能)现在应该可用。
请注意,wsl --upgrade
如果没有访问商店,可能仍然无法使用。要获取未来的更新,请重复上述过程最新发布。
答案3
您可以轻松地运行它--web-download
,这使得它可以从网络而不是 Microsoft Store 下载:
wsl --update --web-download
但是,当 Windows 应用商店被完全禁用时,我还是会遇到错误。
来源:https://github.com/microsoft/WSL/issues/8603#issuecomment-1357669697
答案4
如果 WSL 无法更新,请重新安装。(这不会影响您的数据)
您可以wsl
通过以下方式卸载:(这不会影响您的 WSL 发行版及其数据)
- 按Windows logo key+R
- 输入:
optionalfeatures.exe
- 查找并禁用“适用于 Linux 的 Windows 子系统”。
- 重新启动您的电脑。
现在尝试再次安装 WSL
wsl --install
您可以在提升的命令提示符或 powershell 中使用。
完成后运行此操作(可能不需要但仍然需要):
wsl --set-default-version 2