Windows開機自動開啟VirtualBox虛擬機器──用延後啟動
伺服器要能夠自動地運作,那麼開機時順便把虛擬機器一起開起來,這也是必要的條件。
如果你的虛擬機器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呢?還是要回去宿舍然後卻什麼都不能作好呢?
總之,先休息一下吧......
後來想想根本就不用這麼麻煩,只要用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"
這還是要登入吧,才會執行到這個批次檔呀。如果能以服務執行,就不用在開機之後需要人工介入,能直接開 VM 了,這是我目前還在想的方向,正在測試,也許是有解決方法的。
回覆刪除我也想過要把他改成服務,但找了很久並沒有找到解決方案。希望你能解決這個問題,加油!
回覆刪除我用的是Portable-VirtualBox
回覆刪除我想用
“[VirtualBox安裝路徑]\VBoxManage.exe” startvm “虛擬機器名稱”
這個語法直接啟動虛擬機器(用捷徑)
可是無效
這個方法在本機可以使用
請問還有別的方法嗎??
Portable比較特別,我並不清楚
回覆刪除這種方法是適用於一般安裝的VirtualBox
恩恩
回覆刪除謝謝!!
這東西真的快把我搞瘋了~~
在安裝目錄底下
回覆刪除有一個VBoxHeadless
所以只要在windows"工作排程中"執行
"C:\Program Files\Sun\VirtualBox\VBoxHeadless.exe" -startvm [機器名稱]
就能以類似服務不跳出運作視窗
在背景運行
樓上專業的!
回覆刪除改天試試看
"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等軟體來管理
結果Startup Delayer真的有辦法讓他開啟headless時能夠不顯示命令提示字元而完全在背景執行嗎?
回覆刪除我文中並沒有讓他在背景執行,而是放到前台執行去了。
還沒測試出來呢 = =
回覆刪除目前背景執行,可以使用 hstart這個輔助程式來達到目標
回覆刪除相關網址:http://www.ntwind.com/software/utilities/hstart.html
這消息真棒!感謝啦!
回覆刪除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)
To klhsieh:
回覆刪除Windows XP裡面是「排定的工作」,排程時間也能設定為「在系統啟動時」,我想應該也是類似的功能。
之後有機會我會試試看的,感謝。
有法子在WIN2003,不用登入畫面,就能啟動VirtualBox嗎?
回覆刪除To 簡士強,
回覆刪除要把VirtualBox當做Service啟動,這樣不用登入也可以啟動VirtualBox
你可以研究一下virtualboxserivce這個軟體
https://code.google.com/p/virtualboxservice/
裡面也有Autostart的參數選項
你的圖片失連了。
回覆刪除To 16樓匿名,
回覆刪除真遺憾,網站倒了,我圖片也沒有了orz
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"
謝謝版主的這篇文章,幫助我很大,感恩
回覆刪除To 陳祈霖,
回覆刪除有幫得上就好。