























@@ -89,6 +89,7 @@ jobs:
8989run: |
9090 $ErrorActionPreference = "Continue"
9191 $ok = $false
92+ $restartRequired = $false
92939394 function Invoke-WslText {
9495 param([string[]] $Arguments)
@@ -117,9 +118,15 @@ jobs:
117118 Write-Host "wsl.exe=$($wsl.Source)"
118119 if ($env:ENABLE_WSL2_FEATURES -eq "true") {
119120 Write-Host "enable_wsl2_features=true"
120- foreach ($feature in @("Microsoft-Windows-Subsystem-Linux", "VirtualMachinePlatform", "HypervisorPlatform", "Microsoft-Hyper-V-All")) {
121+ foreach ($feature in @("Microsoft-Windows-Subsystem-Linux", "VirtualMachinePlatform", "HypervisorPlatform")) {
121122 dism.exe /online /enable-feature /featurename:$feature /all /norestart
122123 Write-Host "enable_feature_${feature}_exit=$LASTEXITCODE"
124+ if ($LASTEXITCODE -eq 3010) {
125+ $restartRequired = $true
126+ }
127+ }
128+ if ($restartRequired) {
129+ Write-Warning "wsl2_restart_required=true; Windows optional feature changes require a runner reboot before WSL2 can be imported."
123130 }
124131 }
125132@@ -132,7 +139,7 @@ jobs:
132139 Write-Host "wsl_list_exit=$($list.Code)"
133140134141 $distros = @(Get-WslDistros)
135- if ($distros.Count -eq 0 -and $env:IMPORT_UBUNTU_WSL2 -eq "true") {
142+ if ($distros.Count -eq 0 -and $env:IMPORT_UBUNTU_WSL2 -eq "true" -and -not $restartRequired) {
136143 Write-Host "import_ubuntu_wsl2=true"
137144 $wslRoot = "C:\wsl\UbuntuProbe"
138145 $rootfs = "C:\wsl\ubuntu-noble-wsl.rootfs.tar.gz"
@@ -145,12 +152,16 @@ jobs:
145152 Write-Host $list.Text
146153 Write-Host "wsl_list_after_import_exit=$($list.Code)"
147154 $distros = @(Get-WslDistros)
155+ } elseif ($distros.Count -eq 0 -and $env:IMPORT_UBUNTU_WSL2 -eq "true" -and $restartRequired) {
156+ Write-Warning "import_ubuntu_wsl2=skipped_restart_required"
148157 }
149158150159 if ($distros.Count -gt 0) {
151160 $distro = $distros[0]
152161 Write-Host "wsl_probe_distro=$distro"
153162 $exec = Invoke-WslText -Arguments @("-d", $distro, "--exec", "bash", "-lc", 'set -euo pipefail; uname -a; if [ -f /etc/os-release ]; then sed -n "1,8p" /etc/os-release; fi')
163+ } elseif ($restartRequired) {
164+ $exec = [pscustomobject]@{ Code = 1; Text = "wsl_exec_skipped=restart_required" }
154165 } else {
155166 $exec = Invoke-WslText -Arguments @("--exec", "bash", "-lc", 'set -euo pipefail; uname -a; if [ -f /etc/os-release ]; then sed -n "1,8p" /etc/os-release; fi')
156167 }
@@ -163,11 +174,15 @@ jobs:
163174164175 if ($ok) {
165176 "wsl2_ok=true" >> $env:GITHUB_OUTPUT
177+ "wsl2_restart_required=false" >> $env:GITHUB_OUTPUT
166178 "OPENCLAW_WSL2_PROBE_OK=true" >> $env:GITHUB_ENV
179+ "OPENCLAW_WSL2_RESTART_REQUIRED=false" >> $env:GITHUB_ENV
167180 Write-Host "wsl2_ok=true"
168181 } else {
169182 "wsl2_ok=false" >> $env:GITHUB_OUTPUT
183+ "wsl2_restart_required=$($restartRequired.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT
170184 "OPENCLAW_WSL2_PROBE_OK=false" >> $env:GITHUB_ENV
185+ "OPENCLAW_WSL2_RESTART_REQUIRED=$($restartRequired.ToString().ToLowerInvariant())" >> $env:GITHUB_ENV
171186 Write-Warning "wsl2_ok=false"
172187 }
173188此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。