在没有 Microsoft Store 的情况下更新 WSL 2

Jab*_*alu 12 windows-10 windows-subsystem-for-linux

我安装了 WSL wsl --install,但现在迁移到 Windows 10 20H2 我想更新 WSL(例如使用 GUI 应用程序),但运行wsl --update失败

PS C:\WINDOWS\system32> wsl --update
Checking for updates...
Error: 0x8024500c
Run Code Online (Sandbox Code Playgroud)

如果您无法访问 Windows 应用商店,有人知道如何更新 WSL 吗?因为我使用的是公司笔记本电脑,所以这是禁止的。

Not*_*1ds 10

这个问题背后本来有两个问题:

  • 用于运行 Linux GUI 应用程序的 WSLg 当时仅适用于 Windows 11。
  • wsl --update当时仅更新内核版本,而不是 WSL 本身。

现在,这两个方面在最新的 WSL 版本中都发生了变化,但如何在没有存储访问权限的情况下更新 WSL 的核心问题如今比当时更加重要:

  • WSL 现在作为应用程序提供,而不是像当时那样作为 Windows 功能提供。

  • Windows 10 用户现在可以访问此应用程序(以及 WSLg 功能)

  • WSL 应用程序的默认交付机制是……商店。这就是为什么当您没有商店访问权限时了解如何安装或更新它比以往任何时候都更加重要。

Windows 10 上的 WSLg:先决条件

首先,要在 Windows 10(带或不带应用商店)上安装最新的 WSL,您需要使用 2311 或更高版本的 Windows UBR(更新版本)。这是 Windows 内部版本号的最后 4 位数字,如19045.2311(对于 Windows 10 22H2),我认为这表示每月的服务版本。您可以通过在 PowerShell 中运行来确定 UBR (Get-ComputerInfo).WindowsUBR

如果您运行的 UBR 小于 2311,这可能是暂时的情况,但目前您可以通过以下方式升级:

  • 全面更新 Windows 10

  • 转到“设置” -> “Windows 更新” -> “检查更新”,然后按“检查更新”按钮。

  • 您应该会看到“适用于基于 x64 的系统的 Windows 10 版本 22H2 的 2022-11 累积更新预览 (KB5020030)”作为可选更新提供。

  • 安装它并在出现提示时重新启动。

安装后,WSL 在 Windows 10 和 Windows 11 22H2 下的行为应该相同。

我预计将来不会有太多需要,但如果您碰巧使用的是较旧版本的 Windows 10 或 11,目前无法按上述方式更新,请参阅我的原始答案

“正常”商店行为

虽然之前只有内核更新似乎使用了应用商店(如原始答案中所述),但最新的 WSL 版本本身现在作为Microsoft Store中的应用程序进行安装(和更新) 。如果您wsl --install使用最新的 Windows 10(如上更新)或 Windows 11 (22H2) 版本,系统将默认为您安装应用商店版本(除非您也特意指定该--inbox选项)。

Windows 11 21H2用户还可以直接使用Store页面或上述方法升级到Store版本。之后,wsl --update将致力于未来的更新。

无需应用商店安装/更新

但是,由于您明确表示无法使用应用商店,因此您可能需要使用替代的手动包安装机制:

  1. 从Github 存储库中的WSL 版本页面下载最新的 WSL 应用程序包版本。

  2. 重新启动(以确保 WSL 根本未在使用)。简单的wsl --shutdown 可能会起作用,但通常不会。

  3. 启动管理员 PowerShell 并:

    Add-AppxPackage <path.to>/Microsoft.WSL_1.0.0.0_x64_ARM64.msixbundle
    wsl --version # to confirm
    
    Run Code Online (Sandbox Code Playgroud)

    当然,请调整您下载的最新版本的包名称。

  4. 重新启动(不是绝对必要的,但我有一两个功能在安装后完全重新启动之前无法 100% 工作 - 我只是不记得它们现在是什么)。

WSLg(以及所有其他 WSL 功能)现在应该可用。

wsl --upgrade请注意,如果没有访问商店的权限,这可能仍然无法工作。要获取未来的更新,请对最新版本重复上述过程。


rug*_*ugk 8

您可以使用 轻松运行它--web-download,这使得它可以从网络而不是 Microsoft Store 下载:

wsl --update --web-download
Run Code Online (Sandbox Code Playgroud)

但是,当 Windows 应用商店完全禁用时,我还是遇到了错误。

来源:https ://github.com/microsoft/WSL/issues/8603#issuecomment-1357669697


Not*_*1ds 7


重要更新: 这个答案已经过时了。我出于历史目的而保留原处,但大多数用户应该阅读我更新的答案以获取最新(也是更重要)的信息。


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 上发布的WSL下,wsl --update行为相同 - 它仅更新内核。不过,微软已经在 Microsoft Store 中提供了“Windows Subsystem for Linux Preview”(仅)供 Windows 11 用户使用。

此 WSL 版本更新独立于 Windows 版本,因此 Microsoft(和用户)可以比每年一次的 Windows 周期更频繁地尝试新功能和修复。

预览版本中,wsl --update 更新到最新的 WSL 预览版本。

将 WSL 作为商店应用程序运行存在一些限制,因此我不清楚 Microsoft 是否能够解决这些问题,或者预览版本是否将保持“快速发布”渠道,而 Windows 更新将获得“稳定”版本每年一次的版本。目前还不清楚微软是否能够在任何时候将应用商店版本带回 Windows 10,但这似乎不太可能。

Error: 0x8024500c

该错误表示联系 Microsoft Store 时出现问题,因此内核更新功能很可能使用 Store(或至少是 UWP 交付)机制。如果您无法通过商店更新,那么您可能无法使用--update其中任何一个。

不过,在 Windows 10 下还有其他几种更新 WSL2 内核的方法:

  • 如果您的组织已设置,“更新 Windows 时接收其他 Microsoft 产品的更新”选项(在“设置” -> “Windows 更新” -> “高级设置”中)将自动获取可用的最新 WSL2 内核版本。

    如果您的用户权限不包括应用商店,我假设您无权自行更改此设置。它通常是 IT 管理的设置。

  • 您可以尝试按照WSL 页面的“手动安装”.msi直接从Microsoft下载内核更新。

    请注意,如果您无法直接运行安装程序,您可能仍然可以从 中提取内核并通过(请参阅此处的设置).msi指向它。.wslconfigkernel

  • 如果一切都失败了,您可以从Microsoft GitHub 存储库.wslconfig下载 WSL2 内核的最新源代码版本,构建它,然后通过(按照前面的选项)指向它。

    (插入强制性内容,“在我那个时代,我们必须为每次设备更改构建内核......艰难......双向。”)