winform判断Windows 是否运行在 macOS 系统的虚拟机

cs 复制代码
using System;
using System.Management;

namespace DetectMacOSVM
{
    class Program
    {
        static void Main(string[] args)
        {
            if (IsRunningInMacOSVM())
            {
                Console.WriteLine("This Windows system is running in a macOS virtual machine.");
            }
            else
            {
                Console.WriteLine("This Windows system is not running in a macOS virtual machine.");
            }
        }

        static bool IsRunningInMacOSVM()
        {
            try
            {
                using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"))
                {
                    foreach (var obj in searcher.Get())
                    {
                        string manufacturer = obj["Manufacturer"]?.ToString() ?? string.Empty;
                        string model = obj["Model"]?.ToString() ?? string.Empty;

                        // Check for macOS-related VM indicators
                        if (manufacturer.Contains("Apple") || model.Contains("Mac"))
                        {
                            return true;
                        }
                    }
                }

                using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"))
                {
                    foreach (var obj in searcher.Get())
                    {
                        string biosVendor = obj["Manufacturer"]?.ToString() ?? string.Empty;

                        // Check for Apple-related BIOS information
                        if (biosVendor.Contains("Apple"))
                        {
                            return true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"An error occurred: {ex.Message}");
            }

            return false;
        }
    }
}

说明

  1. 通过 WMI 检索系统信息:

使用 Win32_ComputerSystem 检查制造商和模型名称是否包含 "Apple" 或 "Mac"。

使用 Win32_BIOS 检查 BIOS 信息是否与 Apple 相关。

  1. 虚拟机特征:

如果虚拟机运行在 macOS 主机上,虚拟机可能会暴露 Apple 的信息,比如制造商或 BIOS。

  1. 限制与注意事项:

这种方法依赖于虚拟机是否将 macOS 的相关信息暴露给 Windows。

某些虚拟机管理程序(如 VMware 或 Parallels)可能隐藏或自定义这些信息,导致检查失败。

  1. 真实场景中的变通:

可以结合网卡信息、硬件特性进一步判断(如虚拟化软件特定标识:Parallels、VMware 等)。

不支持在Window虚拟机中运行

cs 复制代码
using System;
using System.Management;

namespace VirtualMachineDetector
{
    class Program
    {
        static void Main(string[] args)
        {
            if (IsVirtualMachine())
            {
                Console.WriteLine("The current system is running in a virtual machine.");
            }
            else
            {
                Console.WriteLine("The current system is not running in a virtual machine.");
            }
        }

        static bool IsVirtualMachine()
        {
            try
            {
                // Check for known virtual machine identifiers in Win32_ComputerSystem
                using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"))
                {
                    foreach (var obj in searcher.Get())
                    {
                        string manufacturer = obj["Manufacturer"]?.ToString() ?? string.Empty;
                        string model = obj["Model"]?.ToString() ?? string.Empty;

                        // Common virtual machine manufacturers and models
                        if (manufacturer.ToLower().Contains("microsoft") && model.ToLower().Contains("virtual"))
                            return true;
                        if (manufacturer.ToLower().Contains("vmware"))
                            return true;
                        if (manufacturer.ToLower().Contains("xen"))
                            return true;
                        if (manufacturer.ToLower().Contains("qemu"))
                            return true;
                        if (manufacturer.ToLower().Contains("parallels"))
                            return true;
                        if (manufacturer.ToLower().Contains("oracle") && model.ToLower().Contains("virtualbox"))
                            return true;
                    }
                }

                // Check for BIOS information in Win32_BIOS
                using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"))
                {
                    foreach (var obj in searcher.Get())
                    {
                        string biosVersion = obj["SMBIOSBIOSVersion"]?.ToString() ?? string.Empty;
                        string manufacturer = obj["Manufacturer"]?.ToString() ?? string.Empty;

                        // Check for virtual machine specific BIOS information
                        if (biosVersion.ToLower().Contains("vmware"))
                            return true;
                        if (biosVersion.ToLower().Contains("virtualbox"))
                            return true;
                        if (manufacturer.ToLower().Contains("xen"))
                            return true;
                        if (manufacturer.ToLower().Contains("parallels"))
                            return true;
                    }
                }

                // Check for processor information in Win32_Processor
                using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"))
                {
                    foreach (var obj in searcher.Get())
                    {
                        string processorName = obj["Name"]?.ToString() ?? string.Empty;

                        // Virtual processors often have specific names
                        if (processorName.ToLower().Contains("virtual"))
                            return true;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"An error occurred while detecting virtual machine: {ex.Message}");
            }

            return false;
        }
    }
}
相关推荐
liulilittle7 小时前
.NET ExpandoObject 技术原理解析
开发语言·网络·windows·c#·.net·net·动态编程
焦虑的二狗12 小时前
Mac下载mysql
数据库·mysql·macos
cpsvps13 小时前
VR协作海外云:跨国企业沉浸式办公解决方案
windows·架构·vr·etw事件
义薄云天us15 小时前
019_工具集成与外部API调用
数据库·人工智能·windows·microsoft·claude code
RainbowSea15 小时前
安装win10出现“计算机意外的重新启动或遇到错误。Windows安装无法继续。若要安装Windows,请单击“确定”重新启动计算机,然后安装系统。”
windows·后端
bug攻城狮15 小时前
理解Grafana中`X-Scope-OrgID`的作用与配置
windows·grafana
通域16 小时前
Mac (m1) Java 加载本地C共享库函数 .dylib 函数 Unable to load library ‘liblicense‘
java·python·macos
扛枪的书生17 小时前
AD 提权-NTLM 中继攻击(强制认证)
windows·渗透·kali·提权·域渗透
hqxstudying18 小时前
Java行为型模式---观察者模式
java·开发语言·windows·观察者模式
至善迎风19 小时前
深入理解 macOS 的 quarantine、xattr 与 Gatekeeper
macos