swift - 检测在虚拟机上运行

标签 swift macos

是否可以检测我的 MacOS 应用程序是否在虚拟机上运行? (我不是指模拟器,只是一些虚拟机,比如 VirtualBox 或其他任何东西..)

最佳答案

我只有 VMWare,但我使用的技术可以扩展到 VirtualBox。除了下面的简单技术外,每个 VM 供应商都有一个与主机系统对话的接口(interface)。但是,他们可能需要更高的权限。

VMware

  1. VMWare 工具 如果安装了 VMWare Tools,您可以检查以下文件。

GFX卡

您可以检查是否安装了VmTools。特别是 VMwareGfx.kext/Library/Extensions 文件夹中的存在

VMware Tools 守护进程启动器

/Library/LaunchDaemons/com.vmware.launchd.vmware-tools-userd

VMware Tools 守护进程

/Library/Application Support/VMware Tools/vmware-tools-daemon

您还可以通过检查 IORegistry
检查是否存在 VMware 显卡 由于 VMware GFX 具有以下

设备 ID:0x0405 修订 ID:0x0000 供应商 ID:0x15ad

  1. 模型标识符 您可以使用 system_profiler
  2. 获取有关设备的所有信息

例如 system_profiler SPHardwareDataType 给出以下信息

Hardware Overview:

  Model Name: Apple device
  Model Identifier: VMware7,1
  Processor Speed: 3.23 GHz
  Number of Processors: 2
  Total Number of Cores: 2
  L2 Cache (per Processor): 256 KB
  L3 Cache (per Processor): 6 MB
  Memory: 2 GB
  Boot ROM Version: VMW71.00V.0.B64.1507021939
  SMC Version (system): 2.8f0
  Serial Number (system): VMiZVX4JH1rt
  Hardware UUID: 564D8995-57E0-91F5-AEDF-1968AB31F81E

Model Identifier和Boot ROM可以用来查出VMware

system_profiler SPHardwareDataType | awk '/模型标识符/{print $3}'

  1. 其他虚拟设备

    • VMware 虚拟 SATA 硬盘
    • VMware 虚拟 USB
    • VMware 虚拟 SATA CDRW 驱动器

关于swift - 检测在虚拟机上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026032/

相关文章:

ios - 如何处理完成处理程序 block 中已取消的 NSURLSessionTask?

ios - Objective C 冒充与多态性/方法覆盖

cocoa - 当水平调整包含的 NSTextView 大小时,如何阻止 NSScrollView 滚动到顶部?

swift - MouseDown 事件阻止 NSCollectionView 委托(delegate)方法

ios - 尽管有 `if let` 构造,编译器告诉我解包变量

ios - 如何使用 swift 以编程方式将 pdf 文档保存到 iCloud Drive?

ios - 在 iOS 中识别未知的 GSM 调用

ios - 动态调整今天的小部件

java - 通过java代码运行.dmg文件

ios - 获取位置后如何进行后台网络调用?