我希望在本地开发机器上运行 "Microsoft Windows (WIN)",并且不需要使用 "Oracle VirtualBox (VBOX)" 的 "Graphical User Interface (GUI)",而是希望自动启动 "Virtual Machine (VM)"。
请问如何以完全运行后台进程的方式实现这一目标?
我希望在本地开发机器上运行 "Microsoft Windows (WIN)",并且不需要使用 "Oracle VirtualBox (VBOX)" 的 "Graphical User Interface (GUI)",而是希望自动启动 "Virtual Machine (VM)"。
请问如何以完全运行后台进程的方式实现这一目标?
技巧在于无需GUI运行虚拟机,这样您就可以像在Windows服务器上一样轻松地将虚拟机作为服务运行。
前提是已经存在一些虚拟机,您可以使用其中的某个。请在下面用实际虚拟机名称替换{vm_name}
。
使用内置可执行文件“VBoxHeadless.exe”。
创建文件。
vm.run.bat
使用
cd "c:\Program Files\Oracle\VirtualBox\"
VBoxHeadless.exe -s {vm_name} -v on
运行并测试它 - 使用名为 "命令行界面 (CLI)" 的WIN调用 "命令行 shell" - 虚拟机将在后台运行。
vm.run.bat
使用“Windows-based script host (WSCRIPT)”和语言“Microsoft Visual Basic Script (VBS)”,运行上述文件“vm.run.bat”。
创建文件。
vm.run.vbs
放置代码
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("vm.run.bat", 0)
set WshShell = Nothing
运行并测试它 - CLI 将在后台运行
wscript.exe vm.run.vbs
参考
您可以使用VBoxManage无头启动VM:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "Your VM name" --type headless
我使用了类似于Samuel的解决方案,效果很好。
在桌面(或任何文件夹)上,右键单击并转到新建→快捷方式。
在目标中输入:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm {uuid} --type headless
在名称中,输入您想要的任何内容,然后单击Finish。
然后要停止同一虚拟机,请创建一个目标为以下内容的新快捷方式:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm {uuid} poweroff
双击这些项会启动或停止虚拟机,而不需要保留任何窗口。
最为一致的选项是使用任务计划程序。
这需要几个相当简单的步骤,但我会详细解释,以确保任何技术背景的人都可以设置:
转到C:\ Users \ YourUserNameHere \ VirtualBox VMs
上面的文件夹名称通常反映了虚拟机的名称。您可以通过检查VirtualBox Manager本身来确认这一点:
该机器名称为WindowsXPSP3
。
首先单击开始按钮,然后输入“任务计划程序”(不包括引号)。然后打开任务计划程序:
在任务计划程序中,我们将看到左侧的结构树。右键单击任务计划程序库。左键单击新建文件夹...:
给文件夹起一个容易记住的名字,比如User Custom
,然后点击确定(如果你已经有一个现有的文件夹可以使用,那也可以,跳过下一段话):
点击您新创建的文件夹,例如我的是User Custom,以突出显示它。在右侧的空列表中右键单击并左键单击创建新任务...:
现在进入棘手的部分。请严格按照我的指示操作。如果你因为没有成功而打算点踩,或者在评论中说“这对我没用”,我敢打赌你在这一步跳过了。请回来再试一次。切换到顶部的触发器选项卡,左键单击新建...。将开始任务:组合框切换为在启动时,然后左键单击确定:
切换到顶部的操作选项卡,并左键单击New...。点击浏览(不要尝试手动输入,否则会让自己头疼),并导航到C:\Program Files\Oracle\VirtualBox。突出显示VBoxManage.exe并左键单击打开:
将程序/脚本:中除了可执行文件和引号之外的所有内容复制到起始位置(可选):中:
最后,将以下行放入添加参数(可选):并点击确定:
startvm "YourVirtualMachineNameFromStep1" --type headless
在我的情况下,我将使用:
startvm "WindowsXPSP3" --type headless
我的{{条件}}选项卡通常设置为以下内容:
请确保您的设置选项卡与以下内容相同,但绝对确保将标记为黄色的项目设置为与我的匹配。这将确保如果某些先决条件尚未准备好,则会重试几次以启动虚拟机,并且虚拟机不会在三天后终止。除非您知道自己在做什么,否则我建议您将其他所有内容保留为默认设置。如果您不按照我在这里展示的方式操作,结果无法正常工作,那就是您的问题:最后,在创建任务窗口底部点击确定按钮。你完成了!
当我重新启动电脑时,我可以登录并打开VirtualBox管理器,看到我的虚拟机正在运行:
我还可以打开任务计划程序,验证它是否成功运行,如果没有成功,我可以看到错误信息(大多数错误都是由于人们试图手动输入我告诉他们不要输入的目录而导致的):
在另一台机器上,我将我的Linux服务器设置为一个虚拟机,并配备了自己的原始固态硬盘。我希望该服务器能够在机器重新启动(崩溃、Windows 更新等)时自动启动,无需用户登录。我按照上面描述的方式设置并重新启动了该机器。
我知道它成功了,因为我能够从另一台计算机访问我的Samba共享(俗称:一个包含我分享给其他计算机的东西的文件夹),而不必首先登录运行服务器虚拟机的计算机。 这100%确认它会在系统启动时启动,而不是在用户登录后启动。
另一种解决方案:vboxsvc - VirtualBox SMF服务包装器
对我来说它完美地运作!
根据Bruno Garett的回答,在我的经验中:测试vm.run.bat
文件会失败。它会给出只读错误,但是使用VBScript运行将正常工作。
此外,要关闭无头浏览器,您可以使用另一个批处理脚本(Sam F的解决方案无法与Bruno的解决方案一起使用):
cd "c:\Program Files\Oracle\VirtualBox\"
VBoxManage controlvm "Ubuntu Server" acpipowerbutton