显然,让 WSL 在启动时启动是相当棘手的,并且已经使用了多种方法来实现这一目标。
2022 年 12 月 24 日对此处最近帖子的回答指出,当 WSL 移至微软商店时,它就被破坏了。WSL 不再能作为服务或计划任务运行,因为它将不再在会话 0 中运行。 关于在 Windows 启动时运行 wsl 的超级用户问题。然后@andrus 的第二个回答指出,一种确实有效的方法(截至 2022 年 12 月 25 日)是使用set object = createobject("wscript.shell") object.run "wsl.exe", 0
仍然适用于最新的 WSL 和 Windows 11 的方法。
据推测该代码将被用作 vbs 脚本,并将从任务计划程序中启动,如下所示本文。
我无法让它工作。我可以使用命令行(powershell)中的 vbs 脚本启动 wsl,但从任务计划程序启动时它不起作用。以防万一,我正在运行 Windows 11 Pro,从 Microsoft Store 下载了 wsl,使用“wsl --install Ubuntu”安装了 wsl(安装 22.04),然后将 wsl 配置为使用 systemd,然后在两个 Windows 和 wsl 中添加相关的“网络桥接”更改,以便 sshd 启动并且机器获得自己的 IP#。当从命令行(使用 wscript 或 cscript)启动时,所有这些似乎都运行得很好。但我只是看不到任何证据表明当从任务计划程序调用 vbs 脚本时 wsl 确实启动了。跟踪任务计划程序的返回代码仅显示“0”个返回代码。
那么,有人可以确认安德鲁斯的说法吗?当他们使用通过微软商店安装的 WSL 2 现代版本时,该解决方案仍然有效?也许可以告诉我如何设置它的最佳描述?
wsl --version 返回
WSL version: 1.0.3.0
Kernel version: 5.15.79.1
WSLg version: 1.0.47
MSRDC version: 1.2.3575
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22621.1105
答案1
我正在使用这个,另存为 .vbs。在最新的 WSL2 上工作:
command = "wsl.exe"
set shell = CreateObject("WScript.Shell")
shell.Run command,0
使用 vbs 的一个优点是它静默启动,任务栏或终端窗口中没有任何内容。
答案2
目前似乎无法将 WSL 作为服务启动。这个问题现在在这个超级用户问题 它提供了一些基于与 Microsoft WSL 团队在 GitHub 上的讨论的文档。也没有提供任何评论来确认 WSL2 的现代安装是否成功。
答案3
你有没有尝试过
wsl --set-version Ubuntu-20.04 2
如果您在 wsl --install 命令可用之前手动安装了 WSL,则可能还需要启用 WSL 2 使用的虚拟机可选组件并安装内核包(如果尚未这样做)。
然后你应该能够使用类似这样的方法(只是一个例子)
' terminator.vbs
myCd = "~"
If WScript.Arguments.Length > 0 Then
myCd = "'$(wslpath -u '" & WScript.Arguments(0) & "')'"
End If
args = "bash" & " -c ""cd " & myCd & "; DISPLAY=:0 terminator"""
WScript.CreateObject("Shell.Application").ShellExecute "C:\Windows\System32\wsl.exe", args, "", "open", 0