・ゲストOSにVMware Toolsをインストールしておいて、以下のように設定しておくだけ。
・ホストOSのシャットダウン/再起動時に、ゲストOSも自動的にシャットダウンしてくれます。
----------------------
■追記
----------------------
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も一緒に終了されます。
以上。