開機自動啟動VMWare

為何要自動啟動VMWare

為什麼開機後要自動啟動VMWare呢?! 當然是要啟動VMWare裏的伺服器, 比如在VMWare裏安裝了Ubuntu系統, 然後架設了ftp server及Apache web server. 當外殼Windows啟動後, 也要順便啟動Ubuntu. 此時就有此需求了

現在問題來了, 當Windows 7啟動後, 一定要先登入, VMWare才有可能自動啟動. 如果希望Windows7在未登入任何使用者時, 就啟動VMWare, 依目前網路上大家的說明, 幾乎都是廢文, 完全不可能.

此篇文章就是為了破除網路上的廢文, 讓VMWare可以在未登入前, 就在背景啟動服務

網路常見的錯誤說明

網路常介紹的, 不外乎如下

1. 寫個bat檔, 然後放在shell:startup裏面
這有二個問題, 一個是此法必需登入才會執行, 另一個問題是為什麼要寫腳本呢, 直接把vmware.exe 或vmplayer.exe的捷徑放在shell:startup裏就好了啊, 這樣啟動時也不會出現一個很礙眼的DOS視窗‧

2. 執行 gpedit.msc, 然後進入Windows設定/指令碼, 於啟動/關機二個項目裏執行指令碼. 此法是完全沒用的, 不用再試了,  試了也是白試。(此法好像需先用其他指令允許啟動本機群組原則,懶的試了)

3.開始/附屬應用程式/系統工具/工作排程器, 在裏面新增一個工作, 觸發時機選電腦啟動時執行. 此方法可行,不過記得要勾選 “不論使用者登入與否均執行”,如此不需要登入亦會自動執行。 不過關機前若要先結束VMWare呢? 又是無解.

正確解決方式

那到底要如何解決呢!! 唯一的方法, 就是自己寫 Windows 服務程式, 本人是使用C# 撰寫的. 不知什麼是 Windows服務的話, 請參照本人所撰寫的文章 — 背景服務Windows Service

請注意, 上述程式碼一定要執行外部程式 vmrun.exe. 因為只有vmrun才能控制VMWare的啟動及停止.

OnStart中, 執行參數是 “-T ws start 映像檔名 nogui”, 記得要加 nogui, 這樣才能無聲無息的在背景中偷偷的運作, 也只有nogui才能正常執行

OnStop中, 執行參數是 “stop 映像檔 soft”, 記得要加 soft, 才能把VMWare正常關機

在C#中, 程式碼撰寫如下

    public partial class 啟動Ubuntu : ServiceBase
    {
        public 啟動Ubuntu()
        {
            InitializeComponent();
        }
        protected override void OnStart(string[] args)
        {
            Process.Start(@"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe", @"-T ws start C:\vmware\ubuntu16045\Ubuntu16045.vmx nogui");
        }

        protected override void OnStop()
        {
            Process.Start(@"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe", @"stop C:\vmware\ubuntu16045\Ubuntu16045.vmx soft");
        }
    }

安裝Windows服務

上述建置程式後, 在dos下輸入 installUtil 程式名.exe, 即可安裝此服務, 可於如下圖看到VMSrv開始於背景執行

vmsrv

若要移除安裝, 請使用 installUtil /u 程式名.exe

操作方式

重新開機後, 就會在背景啟動VMWare, 如下圖所示, vmware-vmx.exe即為正在執行的程式碼‧

vmsrv2

若要停止VMWare, 在dos下使用 stop xxx soft是沒有用的. 需於服務的VMSrv按右鍵/停止服務 才可以‧

請注意, 連 vmrun list, 也是無法列出目前正在執行的VMWare列表

完整程式碼如下 : VMService.rar

工作排程

在 “開始/Windows 系統管理工具/工作排程” 也可以指定開機時就執行 vmware.exe,但卻沒有關機時要執行的選項,所以關機時 vmware 的 lock 檔沒被刪除,導致在下次重新開機時,無法啟重 vmware,因此工作排程是行不通的。

工作排程跟系統服務是完全不一樣的東西,且工作排程其實有很多的 bug,建議還是不要常用工作排程。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *