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;
        }
    }
}
相关推荐
Joy T5 小时前
voice-dump-to-todo:把混乱的语音整理成可执行待办,一个实用的 Agent Skill
ide·macos·语音识别·xcode·任务管理·自研skill
LannyChung8 小时前
PowerShell 下 git log 中文乱码的完整排查与解决
windows·git
JPower_mr.g12 小时前
SmartCall v1.0.9 发布:智能体知识库上线,让 AI 客服先查资料再回答
java·ide·人工智能·macos·架构·开源·xcode
谙弆悕博士13 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
轻口味13 小时前
启元无真机二开实战:先在Mac上养一台Q1——官方URDF到MuJoCo数字孪生的完整链
macos·具身智能·mujoco·启元机器人
Data-Miner16 小时前
一个省大模型积分的 Excel 数据处理方案:脱敏生成逻辑,脚本复用把 token 降到 0
人工智能·windows·excel
无巧不成书021816 小时前
Tomcat部署JSP文件完整指南:手动部署+IDEA工程化实现 附404访问错误全排查
java·ide·windows·tomcat·intellij-idea·js
张张的快乐时光呀!17 小时前
如何配置CUDA开发环境?
windows
fatCatLA17 小时前
记一次狼狈的装机
windows
龙信科技18 小时前
【国内电子数据取证厂商龙信科技】Windows 权限维持型后门分析与防御
大数据·windows·科技·电子数据取证