VMware Serverを手動で制御する時のメモ

VMware Server 2.0をインストールしたけども、サービスが常駐するようになってしまったので、PCがやたら重い。
ということで、サービスを手動で起動・停止できるようにしたときのメモ。先達は多々おられるので自分の作業ログ的に。

大まかな手順はざっとこんな感じ。

  1. サービスの自動起動の無効化
  2. VMwareサービス制御スクリプトの作成
  3. デスクトップにVMware起動、停止のショートカットの作成

まずはサービスの起動設定を「自動」から「手動」に。これやんないと意味ナシ。

Windowsサービスの画面から"VMware" をキーワードにサービスを探すと、以下の6つのサービスが見つかる。

これらのサービスの「スタートアップの種類」を「自動」から「手動」へとひたすら変更。
GUIで変更してもいいが、CUIからだと以下のような感じ。

> sc config "サービス名" start= demand

自動起動に戻したいときは demand を auto に。
これでOSが起動したときにVMware関連のサービスが自動起動しなくなる。
試しに再起動してみるといいかも。

次に、VMwareのサービスを起動・停止させるスクリプトを作るが、その前にサービスの依存関係を確認する。依存関係はサービスのプロパティーから、「依存関係」のタブを開けばOK。
「このサービスが依存するシステムコンポーネント」がサービス起動にあたり必要なコンポーネント
「このサービスに依存しているシステムコンポーネント」がこのサービスを必要としているコンポーネント
そうすると上記のサービスの依存関係は↓のようになっているのが分かる。

 VMware Authorization Service ⇔ Host Agent ⇔ VMware VSS Writer
 VMware DHCP Service
 VMware NAT Service
 VMware Server Web Access

つまり、"VMware VSS Writer"サービスを起動させるとそれに依存するサービスが順に起動、"VMware Authorization Service"を停止するとそれに依存しているサービスが順に停止するということ。(強引)

上記を踏まえてVMwareのサービス制御スクリプトを作ってみる。
Windowsバッチの細かい部分は抜きにして、ざっとこんな感じ。かなり手抜いてます。
きちんと作るなら、サービスの起動状態を判断してからnetコマンドを実行するとデキるすくりぷとになる。
引数のチェックぐらいはした方がいいか。これだとstartとstop以外の文字列が入るとエラー起こしちゃう(笑)
しかしバッチスクリプトの構文ってやっぱり苦手。

@echo off

rem "共通サービス。他に依存性がないので、個別に起動、停止"
net %1 "VMware DHCP Service"
net %1 "VMware NAT Service"
net %1 "VMware Server Web Access"

rem "Service Start"
rem "VMware Host Agent, VMware Authorization Serviceも同時起動"
IF /i "%1" equ "start" net %1 "VMware VSS Writer"

rem "Service Stop"
rem "同時にVmware Host Agent, VMware VSS Writer も停止する"
IF /i "%1" equ "stop"  net %1 "VMware Authorization Service" /yes

exit 0


最後にデスクトップに起動、停止のショートカットを作成する。
さっき作ったバッチファイルは適当なフォルダに突っ込んでおく。(今回は仮に c:\tools\bin\vmwarectl.batとでもしておく)
ショートカットの作成はデスクトップを右クリックして「新規作成」⇒「ショートカット」を選択。
「項目の場所」にはスクリプトスクリプトの引数にstartかstopを指定。

c:\tools\bin\vmwarectl.bat start
c:\tools\bin\vmwarectl.bat stop

適当にファイル名をつけて保存。

あとは実際にショートカットを実行してみてサービスの起動と停止が行われるかを確認すること。これ大事。