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)