// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright (c) Microsoft. All rights reserved. namespace Microsoft.Samples.HyperV.AppHealth { using System; using System.Management; using Microsoft.Samples.HyperV.Common; class AppHealthStatus { private UInt16 OperationalStatusOk = 2; private UInt16 OperationalStatusApplicationCriticalState = 32782; /// /// Gets the applications status in the VM. /// /// The host name of the computer on which /// the VM is running. /// The VM name. public void GetAppHealthStatus( string hostMachine, string vmName ) { ManagementScope scope = new ManagementScope( @"\\" + hostMachine + @"\root\virtualization\v2", null); ManagementObject heartBeatComponent = null; // Get the VM object and its heart beat component. using (ManagementObject vm = WmiUtilities.GetVirtualMachine(vmName, scope)) using (ManagementObjectCollection heartBeatCollection = vm.GetRelated("Msvm_HeartbeatComponent", "Msvm_SystemDevice", null, null, null, null, false, null)) { foreach (ManagementObject element in heartBeatCollection) { heartBeatComponent = element; break; } } if (heartBeatComponent == null) { Console.WriteLine("The VM is not running."); return; } using (heartBeatComponent) { UInt16[] operationalStatus = (UInt16[])heartBeatComponent["OperationalStatus"]; UInt16 vmStatus = operationalStatus[0]; if (vmStatus != OperationalStatusOk) { Console.WriteLine("The VM heartbeat status is not OK"); return; } if (operationalStatus.Length != 2) { Console.WriteLine("The required Integration Components are not running " + "or not installed."); return; } UInt16 appStatus = operationalStatus[1]; if (appStatus == OperationalStatusOk) { Console.WriteLine("The VM applications health status: OK"); } else if (appStatus == OperationalStatusApplicationCriticalState) { Console.WriteLine("The VM applications health status: Critical"); } else { throw new ManagementException("Unknown application health status"); } } } } }