我想在带有“ Microsoft Windows (WIN) ”的本地 DEV 机器上运行没有“ Oracle VirtualBox (VBOX) ”“图形用户界面 (GUI) ”的自动启动“虚拟机 (VM) ”。
如何在完全运行的后台进程中做到这一点?
我想在带有“ Microsoft Windows (WIN) ”的本地 DEV 机器上运行没有“ Oracle VirtualBox (VBOX) ”“图形用户界面 (GUI) ”的自动启动“虚拟机 (VM) ”。
如何在完全运行的后台进程中做到这一点?
解决方案
诀窍是在没有 GUI 的情况下运行 VM。有了这个,您也可以像服务一样轻松地在 WIN 服务器上运行 VM。
先决条件是存在一些虚拟机,你已经有一些。下面把它的名字改为{vm_name}
。
1) 首先我们使用内置的可执行文件“VBoxHeadless.exe”。
创建文件
vm.run.bat
和
cd "c:\Program Files\Oracle\VirtualBox\"
VBoxHeadless.exe -s {vm_name} -v on
运行并测试它 - 使用名为“命令外壳”的 WIN“命令行界面 (CLI) ” - 虚拟机将在后台运行。
vm.run.bat
2) 然后我们使用“ 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 启动无头虚拟机:
"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
在名称中,输入您想要的任何内容,然后单击完成。
然后要停止同一个虚拟机,创建一个新的快捷方式,目标是:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm {uuid} poweroff
双击这些启动和停止虚拟机,没有任何窗口保持打开状态。
从VirtualBox 4.2开始,您可以在启动 vm 时按住Shift 键在后台完全运行它。在此处查看详细信息。
真正最一致的选项是使用任务计划程序。
这需要几个非常简单的步骤,但我将详细解释它们以确保具有任何技术背景的任何人都可以进行设置:
导航C:\Users\YourUserNameHere\VirtualBox VMs
上面的文件夹名称一般反映了虚拟机名称。您可以通过检查 VirtualBox Manager 本身来确认这一点:
机器名称是WindowsXPSP3
。
首先单击开始按钮并键入不带引号的“任务调度程序”。然后打开任务计划程序:
在任务调度程序中,我们将在左侧看到一个结构树。右键单击Task Scheduler Library
。左键单击New Folder...
:
将文件夹命名为令人难忘的名称,例如User Custom
并点击确定(如果您已经有一个想要使用的现有文件夹,那也可以,请跳到下一段):
在我的例子中,单击您新创建的文件夹User Custom
以突出显示它。右键单击右侧的空列表并左键单击Create New Task...
:
现在是棘手的事情。按照我的指示逐字逐句。如果您因为它不起作用而想投反对票,或者在评论中说“这对我不起作用”,我敢打赌您在这里跳过了一步。回来再试一次。
Name
and可以是任何你喜欢的Description
,它只是美观的,不会影响功能。我将以我的虚拟机命名我的并进行简要说明。重要的是您选择Run whether user is logged on or not
和Run with highest privileges
:
切换到Triggers
顶部的选项卡并左键单击New...
。Begin the task:
将组合框切换到At Startup
,然后左键单击确定:
切换到Actions
顶部的选项卡并左键单击New...
。单击浏览(不要尝试手动输入,您会很头疼)并导航到C:\Program Files\Oracle\VirtualBox
. 突出显示VBoxManage.exe
并左键单击Open
:
将除可执行文件和引号之外的所有内容复制Program/script:
到Start in (optional):
:
最后,输入以下行Add arguments (optional):
并点击 OK:
startvm "YourVirtualMachineNameFromStep1" --type headless
就我而言,我将使用:
startvm "WindowsXPSP3" --type headless
我的Conditions
标签通常设置为以下内容:
确保您的Settings
选项卡如下所示,但绝对确保您已将标记为黄色的项目设置为与我的匹配。这将确保如果某些先决条件尚未准备好,它将重试几次以启动虚拟机,并且虚拟机不会在 3 天后终止。除非您知道自己在做什么,否则我会将其他所有内容保留为默认值。如果您不按照我在这里向您展示的内容进行操作,并且最终无法正常工作,那是您的问题:
Create Task
最后,点击窗口底部的确定。你完成了!
当我重新启动计算机时,我可以登录并打开 VirtualBox Manager 并看到我的 VM 正在运行:
我还可以打开任务计划程序备份,并验证它是否成功运行,或者如果没有,看看错误是什么(大多数错误将是人们试图手动输入我告诉他们不要的地方的目录错误):
在另一台机器上,我将我的 Linux 服务器设置为具有自己原始固态硬盘的虚拟机。如果机器自动重新启动(崩溃、Windows 更新等),我希望该服务器能够启动备份,而无需用户登录。我完全按照上面描述的方式设置了该服务器并重新启动了该机器。我知道它运行成功,因为我能够从另一台计算机访问我的 Samba 共享(外行:一个文件夹,其中包含我通过网络共享到我的其他计算机的内容),而无需先登录到运行服务器 VM 的计算机。这 100% 确认它确实在系统启动时启动,而不是在用户登录后启动。
另一种解决方案:http: //vboxvmservice.sourceforge.net/
它非常适合我!
如果您不介意手动操作一次应用程序,以操作系统在后台运行结束;以下是选项:
打开虚拟盒子。右键单击您的来宾操作系统 > 选择:启动 Headless。等待一段时间,直到操作系统启动。
然后关闭 Virtual Box 应用程序。
根据我的经验,按照 Bruno Garett 的回答:测试vm.run.bat
文件失败,给出只读错误,但运行 VB 脚本可以正常工作。只是为了节省任何人的时间。
另外要关闭无头,您可以使用另一个批处理脚本(Sam F 的解决方案不适用于 Bruno 的解决方案):
cd "c:\Program Files\Oracle\VirtualBox\"
VBoxManage controlvm "Ubuntu Server" acpipowerbutton
第二行是从这里获得的,您可以使用任何您想要的选项。