Saltar al contenido

¿Cómo detectar si mi aplicación se está ejecutando en una máquina virtual?

Solución:

Esto es lo que uso:

using (var searcher = new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem"))
{
  using (var items = searcher.Get())
  {
    foreach (var item in items)
    {
      string manufacturer = item["Manufacturer"].ToString().ToLower();
      if ((manufacturer == "microsoft corporation" && item["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL"))
          || manufacturer.Contains("vmware")
          || item["Model"].ToString() == "VirtualBox")
      {
        return true;
      }
    }
  }
}
return false;

Editar 2014-12-02: Código actualizado para que ya no detecte Microsoft Surface Pro como VM. Gracias a Erik Funkenbusch por señalar esto.

Editar 2017-06-29: Código actualizado para que también verifique el valor del HypervisorPresent propiedad.

Editar 2018-02-05: cheque eliminado para el HypervisorPresent propiedad ya que es incorrecta. Esta propiedad podría devolver true si se ejecuta en el sistema operativo del host en un servidor Hyper-V.

Según la publicación del blog de Virtual PC Guy “Detectando máquinas virtuales de Microsoft”, puede usar WMI para verificar el fabricante de la placa base. En PowerShell:

 (gwmi Win32_BaseBoard).Manufacturer -eq "Microsoft Corporation"

Esta función C detectará el sistema operativo invitado de VM: (probado en Windows, compilado con Visual Studio)

#include <intrin.h>

    bool isGuestOSVM()
    {
        unsigned int cpuInfo[4];
        __cpuid((int*)cpuInfo,1);
        return ((cpuInfo[2] >> 31) & 1) == 1;
    }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *