:::

Windows開機自動開啟VirtualBox虛擬機器──用延後啟動

4月 03, 2008 , , 22 Comments Edit Copy Download

伺服器要能夠自動地運作,那麼開機時順便把虛擬機器一起開起來,這也是必要的條件。

如果你的虛擬機器VirtualBox架在Linux(特別是ubuntu)上,你可以參考ubuntu正體中文站的「用 VirtualBox 讓 Windows Server 偷偷(背景執行)跑在 Linux Server 上」,但是如果你跟我一樣把VirtualBox架在Windows上,那麼就沒有這麼簡單了。


在Windows裡面要啟動虛擬機器的命令列跟Linux一樣,用VBoxSDL.exe會開啟一個簡單的視窗(像上圖),內容如下,

"C:\Program Files\innotek VirtualBox\VBoxSDL.exe" vm Koha

或著用以下VBoxManage.exe開啟跟普通VirtualBox相同的視窗:

"C:\Program Files\innotek VirtualBox\VBoxManage.exe" startvm Koha

紅色的字是VirtualBox的安裝位置,藍色的字則是虛擬機器的名稱。你可以把它寫成bat批次執行檔以便快速執行,參考這個檔案當作範例,自己修改。


無法直接開啟虛擬機器

我先說失敗的經驗,在Windows 2003 Server或Windows XP裡面都沒有辦法順利地直接啟動。

一開始找尋的方法是將應用程式(Application)改成以系統服務(NT Service)的方式運行,「以服務形式啟動 Windows 內的 PPPoE 撥號網路」這一篇教學很完整,啟動服務所需要用到的instsrv.exe及srvany.exe也可以從Windows的網站上免費下載。或著是使用其他軟體來將應用程式轉成系統服務,然而除了DynaSvr-服務控制程序(NT Service Controller)大陸簡體程式是免費之外,大部分都是要收費付費軟體。

我嘗試以前者的方式,用instsrv.exe及srvany.exe將VBoxSDL.exe轉成系統服務執行。雖然可以成功轉換並執行,但是網路卻怎樣也沒辦法連上。最後我的結論是,在Windows理面,以服務執行虛擬機器,是不可行的。(或著是沒這麼單純,還要啟動其他相對應的程式)

接著我以自動登入搭配啟動應用程式的方式進行。Windows只要在開始 / 程式集 / 啟動 裡面的程式,只要登入之後就會自動執行。首先先將上面的命令列指令作成批次執行檔,擺到啟動裡面,或是用開機管理軟體starter(PChome Toget的介紹)來設定。再設定開機時自動登入指定帳號,或著是用簡化的系統自動登入工具

然而,還是失敗了。Windows 2003 Server像是不接受用自動登入開啟程式虛擬機器一樣,不管是設定在,「啟動 - 目前的使用者」、「啟動 - 所有的使用者」、「登錄檔 - 使用者 啟動列表」、「登錄檔 - 機器 啟動列表」、「登錄檔 - 機器 啟動服務」、「登錄檔 - 預設使用者啟動列表」,都無法用自動登入的方式啟動虛擬機器。

正確來說,在剛開啟的Windows狀態下啟動VirtualBox會發生錯誤,用VBoxSDL.exe開啟時,會發生錯誤「SQL Error: no available video device"」,而導致無法開啟。


用延後開啟的方式虛擬機器(Startup Delayer)

後來發現,改用VBoxManager.exe的方式,雖然無法在第一時間啟動虛擬機器,但是卻可以在開機直到所有程式都載入之後,就可以順利執行。

因此這時候Startup Delayer或是系統看門狗WinPatrol的Delayed Start就可以派上用場。

接下來,以Startup Delayer的設定來說明:

開啟主程式之後,先切換到你設定的帳號(非必要過程)。

按左上角綠色十字的Add功能。

選擇要延遲啟動的程式,此處選擇C:\Program Files\innotek VirtualBox\VBoxManage.exe。

在Parameters填入「startvm Koha」,Koha可改成您虛擬機器的名稱。在Delay填入要延後的時間,三格欄位個別是小時、分鐘、秒鐘,我們在分鐘填入1,表示要延後一分鐘。

看到剛剛新增的VBoxManage。

可以在該項目上面按右鍵,選擇「Start now」測試啟動狀態。

如果可以順利啟動,那麼重新開機之後應該會看到視窗上方Startup Delayer的倒數計時。等待數到0之後,VirtualBox的虛擬機器就能順利啟動了!


光是為了這個功能,這一篇花了我一整天的時間。想說終於可以回去了,但是卻發現外面網路連不到實驗室的伺服器,這讓我又萌生了不想離開這邊的念頭。今晚要繼續待在這邊研究Koha呢?還是要回去宿舍然後卻什麼都不能作好呢?

總之,先休息一下吧......

總共22 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 後來想想根本就不用這麼麻煩,只要用bat批次執行檔、搭配ping來作延後執行就可以作到

    範例程式如下,-n 30表示要延後幾秒,"DSpace-DLLL"是虛擬機器名稱:

    @echo off
    echo 30秒之後自動啟動DSpace...
    @ping 127.0.0.1 -n 30 -w 1000 > nul
    "c:\Program Files\Sun\VirtualBox\VBoxManage.exe" startvm "DSpace-DLLL"

    回覆刪除
  2. 這還是要登入吧,才會執行到這個批次檔呀。如果能以服務執行,就不用在開機之後需要人工介入,能直接開 VM 了,這是我目前還在想的方向,正在測試,也許是有解決方法的。

    回覆刪除
  3. 我也想過要把他改成服務,但找了很久並沒有找到解決方案。希望你能解決這個問題,加油!

    回覆刪除
  4. 我用的是Portable-VirtualBox
    我想用
    “[VirtualBox安裝路徑]\VBoxManage.exe” startvm “虛擬機器名稱”
    這個語法直接啟動虛擬機器(用捷徑)
    可是無效
    這個方法在本機可以使用
    請問還有別的方法嗎??

    回覆刪除
  5. Portable比較特別,我並不清楚
    這種方法是適用於一般安裝的VirtualBox

    回覆刪除
  6. 恩恩
    謝謝!!
    這東西真的快把我搞瘋了~~

    回覆刪除
  7. 在安裝目錄底下
    有一個VBoxHeadless
    所以只要在windows"工作排程中"執行

    "C:\Program Files\Sun\VirtualBox\VBoxHeadless.exe" -startvm [機器名稱]

    就能以類似服務不跳出運作視窗
    在背景運行

    回覆刪除
  8. "C:\Program Files\Sun\VirtualBox\VBoxHeadless.exe" -startvm [機器名稱]

    towns使用版本為 3.2.6
    依照上這樣的方式來做,開啟虛擬機後,仍會出現一個“命令提示字元”的畫面(如圖http://vip.blueshop.com.tw/towns/virtualbox/headless.jpg)

    towns期望VBX能達到一些目標
    1. 重開後自動啟動
    2. 每隔5分鐘開啟一台
    3. 背景執行(不跳出任何畫面)
    目前測試,都無法成功,可能就得用布丁前輩說的使用Startup Delayer等軟體來管理

    回覆刪除
  9. 結果Startup Delayer真的有辦法讓他開啟headless時能夠不顯示命令提示字元而完全在背景執行嗎?

    我文中並沒有讓他在背景執行,而是放到前台執行去了。

    回覆刪除
  10. 目前背景執行,可以使用 hstart這個輔助程式來達到目標
    相關網址:http://www.ntwind.com/software/utilities/hstart.html

    回覆刪除
  11. Hi
    我是用windows 7,想達到背景自動run VMWare player的目的。
    已經成功了。
    我是參考
    http://answers.microsoft.com/en-us/windows/forum/windows_vista-performance/how-do-i-create-a-user-defined-service/ed290a19-3115-4c26-abee-5122181877e1

    以下是我的補充:
    1. 新增完了之後 要看自己設的
    去點工作排程器程式庫(左邊欄)
    2. "一般"頁 最下方的"隱藏"不必打勾
    3. 觸發程序要新增,選「在系統啟動時」
    4. 動作那邊
    最安全的做法,是你的執行path 與 parameter 都要加double quote
    5. 在工作排程器裡,你會看到「上次執行結果」為工作正在執行中(0x41301)

    回覆刪除
  12. To klhsieh:

    Windows XP裡面是「排定的工作」,排程時間也能設定為「在系統啟動時」,我想應該也是類似的功能。
    之後有機會我會試試看的,感謝。

    回覆刪除
  13. 有法子在WIN2003,不用登入畫面,就能啟動VirtualBox嗎?

    回覆刪除
  14. To 簡士強,

    要把VirtualBox當做Service啟動,這樣不用登入也可以啟動VirtualBox

    你可以研究一下virtualboxserivce這個軟體
    https://code.google.com/p/virtualboxservice/

    裡面也有Autostart的參數選項

    回覆刪除
  15. 你的圖片失連了。

    回覆刪除
  16. To 16樓匿名,

    真遺憾,網站倒了,我圖片也沒有了orz

    回覆刪除
  17. Portable-VirtualBox 啟動方法(非服務)
    1.在VBoxManage裡面的test虛擬機點右鍵,在桌面建立捷徑。
    2.點桌面捷徑右鍵內容,選擇捷徑標籤裡的目標
    例如:C:\Users\Administrator\Documents\VirtualBoxPortable\app32\VirtualBox.exe --comment "test" --startvm "ca0802a2-2e57-6690-9869-234c1c2654ed"
    以下參考版主的指令所寫的啟動指令所修改的程式,範例BAT檔:
    --------------------------------------------------
    @echo off
    echo 30秒之後自動啟動VirtualBox...
    @ping 127.0.0.1 -n 30 -w 1000 > nul
    "C:\Users\Administrator\Documents\VirtualBoxPortable\Portable-VirtualBox.exe"
    echo 30秒之後自動啟動test...
    @ping 127.0.0.1 -n 30 -w 1000 > nul
    C:\Users\Administrator\Documents\VirtualBoxPortable\app32\VirtualBox.exe --comment "test" --startvm "ca0802a2-2e57-6690-9869-234c1c2654ed"

    回覆刪除
  18. 謝謝版主的這篇文章,幫助我很大,感恩

    回覆刪除