隐藏 WSL2 开机自启的控制台窗口

WSL2 在所有终端窗口关闭后会自动停止实例。虽然可以通过 .wslconfig 设置 vmIdleTimeout=-1instanceIdleTimeout=-1 来缓解,但部分版本仍然会出现实例被终止的情况。一个可靠的方案是在登录时启动一个常驻进程来保持实例运行,但直接通过任务计划程序运行 wsl.exe 会弹出一个黑色控制台窗口。本文介绍用 VBS 脚本包装来隐藏这个窗口。

创建 VBS 启动脚本

在 Windows 上创建一个 VBS 脚本文件,例如 C:\Users\你的用户名\start-wsl.vbs,内容如下:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "wsl.exe -d archlinux -u root /bin/bash -c ""sleep infinity""", 0, False

archlinux 替换为你的 WSL 发行版名称(可在 PowerShell 中执行 wsl -l 查看)。

WshShell.Run 的参数说明:

  • 第二个参数 0 — 隐藏窗口,不显示任何界面
  • 第三个参数 False — 不等待子进程结束,脚本立即退出

创建计划任务

在 PowerShell 中执行以下命令,创建一个在登录时自动运行的计划任务:

$action = New-ScheduledTaskAction -Execute "wscript.exe" -Argument '"C:\Users\你的用户名\start-wsl.vbs"'
$trigger = New-ScheduledTaskTrigger -AtLogOn
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit (New-TimeSpan -Seconds 0)
Register-ScheduledTask -TaskName "WSL2 AutoStart" -Action $action -Trigger $trigger -Settings $settings

验证

注销并重新登录(或重启),在 PowerShell 中执行 wsl -l --running 确认 WSL 实例已启动。整个过程中不会出现任何控制台窗口。