VMWare

VMware ServerでホストOSシャットダウン時に、ゲストOSもシャットダウン


・ゲストOSにVMware Toolsをインストールしておいて、以下のように設定しておくだけ。
・ホストOSのシャットダウン/再起動時に、ゲストOSも自動的にシャットダウンしてくれます。

vmsetting.jpg

----------------------
 ■追記
----------------------

VMWare: ゲストOS の自動起動 自動終了 Suspend Resume 方法(1)
VMWare: ゲストOS の自動起動 自動終了 Suspend Resume 方法(2)
にて 「サスペンド / レジューム」の方法が載っています。

以下に簡単な(ゲストOSを停止させるための)batファイルを示します。


[ vmstop.bat ]
----------------------
@echo off

rem ログファイルの設定
set logfile="D:\VirtualMachines\2003\logs\log.log"

rem 日付時刻表示
echo %date%%time% >> %logfile% 2>&1

rem ゲストOS停止
echo call "C:\Program Files\VMware\VMware Server\vmware-cmd.bat" "D:\VirtualMachines\2003\2003.vmx" stop >> %logfile% 2>&1
call "C:\Program Files\VMware\VMware Server\vmware-cmd.bat" "D:\VirtualMachines\2003\2003.vmx" stop >> %logfile% 2>&1
echo. >> %logfile% 2>&1
----------------------


 しかし、上記のいずれの方法も「ホストOSへのリモートデスクトップ経由」ではNGとなります。
あくまでも端末の前に座って、ホストOSを直に操作することが大前提となっています(試してみたらNGでした)。
 それじゃあ自分でそれらを制御するWindowsサービスなプログラムを書けばいいんじゃね?とか思ってそれも試してみたけど、NG でした(笑)。
プロジェクト名は [ vmAutoCmd ]です。


[ Program.cs ]
----------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceProcess;
using System.Diagnostics;

namespace vmAutoCmd {
    class Program:ServiceBase {
        static void Main(string[] args) {
            System.ServiceProcess.ServiceBase[] ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Program() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
            Console.ReadLine();
        }
        protected override void OnStart(string[] args) {
            base.OnStart(args);
        }
        protected override void OnStop() {
            base.OnStop();
            
            //vmstop.batを指定して、そのプロセスを起動させる
            string program = global::vmAutoCmd.Properties.Settings.Default.CmdPath;

            Process extProcess = new Process();
            extProcess.StartInfo.FileName = program;
            extProcess.Start();        
        }
    }
}
----------------------


[ ProjectInstaller.cs ]
----------------------
using System;
using System.Collections;
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;

[RunInstallerAttribute(true)]
public class ProjectInstaller : Installer {

    private ServiceInstaller serviceInstaller;
    private ServiceProcessInstaller processInstaller;
    private string[] param = new string[] { "VMAuthdService", "vmserverdWin32", "vmount2"};

    public ProjectInstaller() {
        processInstaller = new ServiceProcessInstaller();
        serviceInstaller = new ServiceInstaller();

        // Service will run under system account
        processInstaller.Account = ServiceAccount.LocalSystem;

        // Service will have Start Type of Automatic
        serviceInstaller.StartType = ServiceStartMode.Automatic;
        this.setOsVersion();

        serviceInstaller.ServicesDependedOn = this.param;
        serviceInstaller.ServiceName = "vmAutoCmd";
        serviceInstaller.Description = "VMware Serverの自動終了プログラム";

        Installers.Add(serviceInstaller);
        Installers.Add(processInstaller);
    }
}
----------------------

[ app.config ]
----------------------
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="vmAutoCmd.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <vmAutoCmd.Properties.Settings>
            <setting name="CmdPath" serializeAs="String">
                <value>C:\Program Files\vmAutoCmd\vmstop.bat</value>
            </setting>
        </vmAutoCmd.Properties.Settings>
    </applicationSettings>
</configuration>
----------------------


 ホストOSへのリモートデスクトップ・ログインからゲストOSの再起動などを行う場合は、手動で個々にゲストOSを再起動を掛ける か、ホストOSに上記のbatファイルを置いておいて、それを実行してからホストOSを再起動して下さい。

 あくまでも、ホストOSにリモートデスクトップで接続する場合のみがNGですので、一番上の設定さえしておけば、(端末を直接操作す る場合は)ホストOSの終了時にゲストOSも一緒に終了されます。


以上。
このページの先頭へ