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


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

## 创建 VBS 启动脚本

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

```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 中执行以下命令，创建一个在登录时自动运行的计划任务：

```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 实例已启动。整个过程中不会出现任何控制台窗口。


---

> 作者: Nite  
> URL: https://www.nite07.com/zh-cn/posts/wsl-autostart-hidden/  

