1. 程式人生 > >讓VirtualBox虛擬機器實現開機自動後臺執行

讓VirtualBox虛擬機器實現開機自動後臺執行

目的:開機後自動後臺執行虛擬機器,只有程序,不顯示GUI介面。

由於VMware Workstation不免費,本身也沒有後臺執行虛擬機器的功能,只能通過第三方軟體把啟動虛擬機器做成系統服務,或者設定了“在關閉後在後臺執行電源已開啟的虛擬機器”用批處理啟動虛擬機器再殺程序,或者用計劃任務。因此選擇使用免費的VirtualBox。

後臺啟動VirtualBox虛擬機器的命令有2個:

VBoxHeadless -s|--startvm<uuid>|<name> [--vrde=on|off|config]

VirtualBox 1.6後的版本里,VBoxVRDP只是VBoxHeadless的快捷方式,不再是單獨的命令。防止VRDP埠(虛擬機器設定裡的遠端桌面)被外界訪問到,用引數--vrde=off,虛擬機器用橋接網路時,虛擬機器系統自帶的遠端桌面不受此引數影響。

VBoxManage [-q|--nologo] startvm<uuid>|<name> [--type gui|sdl|headless]

The following values are allowed:

gui - Starts a VM showing a GUI window.This is the default.

headless - Starts a VM without a window forremote display only.

啟動虛擬機器的指令碼(虛擬機器的名稱為XP):

@echo off

:: by oicu

cd /d "D:\ProgramFiles\Oracle\VirtualBox"

VBoxHeadless --startvm "XP"

:: VBoxManage startvm "XP" --type headless

直接啟動批處理指令碼的話(包括指令碼放到“啟動”裡),無論用哪條命令啟動虛擬機器都會有一個headless的cmd視窗,用start ""也不能消去,關閉了該cmd視窗後虛擬機器也退出了,而且屬於不正常關閉。可以一次啟動多個虛擬機器系統。

關閉虛擬機器的指令碼:

@echo off

:: by oicu

cd /d "D:\Program Files\Oracle\VirtualBox"

VBoxManage controlvm "XP"acpipowerbutton

:: send {Enter} to VM, for Windows Guest OSonly.

VBoxManage controlvm "XP"keyboardputscancode 1c

    開啟gpedit.msc組策略,在使用者的登入/登出腳本里,分別新增上面2個指令碼。這裡不能使用計算機的啟動/關機指令碼,測試過是不能啟動虛擬機器的,可能和SYSTEM使用者執行的指令碼不能訪問網路等許可權有關。使用登入指令碼啟動虛擬機器不會顯示headless的cmd視窗(系統組策略裡預設是隱藏執行指令碼),未測試計劃任務的方式。

    遠端登入Windows系統的虛擬機器後,如果遠端未登出,用關閉虛擬機器的指令碼就無法關閉虛擬機器,原因是關閉計算機時會提示“其他使用者登入到這臺計算機,關閉WINDOWS會使他們丟失資料,您要繼續關機嗎?”造成acpi關機方式失敗。在Guest系統裡設定關機/登出指令碼,用shutdown -s -t 0也無效。解決方法是向虛擬機發送回車鍵,模擬“確定”操作,當然也可以用shutdown遠端關閉系統,但設定和操作更麻煩了。

    虛擬機器是Linux時,避免用VboxHeadless.exe和VirtualBox.exe交替登入,兩者的不同步可能會造成虛擬機器的filesystem損壞。

啟動命令示例(實現後臺執行,並自動關閉headless的cmd視窗):

@echo off
cd C:\Program Files\Oracle\VirtualBox
vboxmanage startvm CentOS6.6 -type headless
pause
exit

關閉命令示例:

@echo off
cd C:\Program Files\Oracle\VirtualBox
vboxmanage controlvm CentOS6.6 poweroff
pause
exit