WSL2与VMware冲突解决方案
本文总结了 WSL2 与 VMware 虚拟化冲突的解决方案。
结论
在 Windows 11 25H2 + VMware Workstation(17.x / 25H2) 下:
✅ VMware 与 WSL2 可以共存
❌ 但 VMware 不再是“直通 VT-x”的传统模式
👉 而是 运行在 Hyper-V 之上(兼容模式)
换句话说:
- Hyper-V ON
- WSL2 ✅
- Docker Desktop(WSL2 后端)✅
- VMware ✅(但走 Hyper-V 后端)
- Hyper-V OFF
- WSL2 ❌
- VMware ✅(性能最好)
两种模式
| 模式 | Hyper-V | WSL2 | VMware | 性能 |
|---|---|---|---|---|
| Hyper-V ON | ON | ✅ | ✅ | ⭐⭐⭐ |
| Hyper-V OFF | OFF | ❌ | ✅ | ⭐⭐⭐⭐⭐ |
Hyper-V ON模式下虚拟化路径如下①和③所示:
路径 ①(Linux / Windows VM)
硬件
└── Hyper-V (L0)
└── Windows
└── VMware / VirtualBox (L1)
└── Linux / Windows VM (L2)
路径 ②(macOS VM)
硬件
└── VMware (L0)
└── macOS (L1)
路径 ③(WSL2)
硬件
└── Hyper-V (L0)
└── Windows
└── WSL2 (L1)
由于苹果内核不支持Hyper-V这种虚拟化模型,macOS 虚拟机只能走路径 ②,即 Hyper-V OFF。
Hyper-V ON模式下性能损失是客观存在的:
| 项目 | 直通 VT-x | Hyper-V 后端 |
|---|---|---|
| CPU | 100% | ~85–90% |
| I/O | 原生 | 稍慢 |
| Nested VT | 强 | 弱 |
由于Hyper-V ON模式会导致VMware性能损失,此外我的虚拟机环境还有MacOS,MacOS 虚拟机不支持在 Hyper-V 之上的“二级虚拟化路径”,所以我优先Hyper-V OFF,如果需要用到WSL2,再切换到Hyper-V ON。(如果觉得每次切换需要重启麻烦,可以配置开机双启动的选项来选择)
Hyper-V OFF
如何切换
切换 VMware / VirtualBox:
bcdedit /set hypervisorlaunchtype off
该命令控制Windows 启动时不会再加载 Hyper-V 的 Hypervisor,也就是说:
- Hyper-V 不工作
- WSL2 不工作
- Virtual Machine Platform 不工作
- Windows Sandbox 不工作
- CPU 的 VT-x / SVM 虚拟化能力释放给第三方虚拟机
切换到 WSL2:
bcdedit /set hypervisorlaunchtype auto
👉 相互切换必须重启才生效
shutdown /r /t 0 # 或手动重启
换来的是:
- ✔ VMware 满血
- ✔ WSL2 满血
- ✔ 不互相妥协
快捷切换脚本
可将下面代码保存为切换脚本文件toggle_hypervisor.bat:
@echo off
chcp 437 >nul
setlocal EnableDelayedExpansion
:: ================================
:: Admin check
:: ================================
net session >nul 2>&1
if %errorlevel% neq 0 (
echo Please run this script as Administrator.
pause
exit /b 1
)
:: ================================
:: Get current hypervisorlaunchtype
:: ================================
set CURRENT=
for /f "tokens=2" %%i in ('
bcdedit /enum {current} ^| findstr /i hypervisorlaunchtype
') do (
set CURRENT=%%i
)
if not defined CURRENT (
set CURRENT=Auto
)
:MENU
cls
echo ================================
echo Hypervisor Launch Type Manager
echo ================================
echo.
echo Current state: %CURRENT%
echo.
echo 1. Toggle (Auto ^<^> Off)
echo 2. Set Auto (Enable Hyper-V)
echo 3. Set Off (Disable Hyper-V)
echo 4. Exit
echo.
set /p CHOICE=Select (1-4):
if "%CHOICE%"=="1" goto TOGGLE
if "%CHOICE%"=="2" goto SET_AUTO
if "%CHOICE%"=="3" goto SET_OFF
if "%CHOICE%"=="4" goto END
echo Invalid selection.
timeout /t 1 >nul
goto MENU
:TOGGLE
if /i "%CURRENT%"=="Auto" (
set NEW=off
) else (
set NEW=auto
)
goto APPLY
:SET_AUTO
set NEW=auto
goto APPLY
:SET_OFF
set NEW=off
goto APPLY
:APPLY
echo.
echo Setting hypervisorlaunchtype to %NEW% ...
bcdedit /set hypervisorlaunchtype %NEW%
if errorlevel 1 (
echo Failed to update hypervisorlaunchtype.
pause
exit /b 1
)
set CURRENT=%NEW%
echo.
set /p REBOOT=Reboot now? (Y/N):
if /i "%REBOOT%"=="Y" (
shutdown /r /t 0
)
goto MENU
:END
exit /b 0
以管理员身份运行,效果如下:
================================
Hypervisor Launch Type Manager
================================
Current state: Auto
1. Toggle (Auto <> Off)
2. Set Auto (Enable Hyper-V)
3. Set Off (Disable Hyper-V)
4. Exit
Select (1-4):
Hyper-V ON
核心思想
让 VMware 接受 Hyper-V 的存在,使用微软的虚拟化平台:
- WHP(Windows Hypervisor Platform)
- VBS(Virtualization-Based Security)
开启 Windows 必要组件
打开:
控制面板
→ 程序
→ 启用或关闭 Windows 功能
✅ 勾选:☑ Virtual Machine Platform
确认 Hyper-V 启动
Windows PowerShell 执行:
bcdedit /enum | findstr hypervisor
应看到:
hypervisorlaunchtype Auto
❗ 不要设为 off
验证是否真的共存
WSL2 验证:
wsl -l -v
输出类似:Ubuntu-22.04 Running 2。
VMware 验证:
正常启动虚拟机,不会再提示:VMware Workstation and Hyper-V are not compatible。
[!CAUTION]
MacOS 虚拟机在此方式下无法打开。

浙公网安备 33010602011771号