2026/10/23 15:06:33

VMware 安装 macOS 10.12.6 虚拟机补丁与 vmx 配置

VMware 安装 macOS 10.12.6 虚拟机补丁与 vmx 配置 简介unlocker208 是面向需要在 VMware Workstation 上运行 macOS 的开发者与测试人员的必备补丁用于解除虚拟机对苹果系统的限制使新建虚拟机时能选中 Apple 机型并正常引导启动。压缩包共 18 个文件、约 9.61MB由 8 个 sh 脚本、3 个 exe 程序、3 个 cmd 批处理、3 个 py 脚本和 1 份 readme 说明构成sh 与 cmd 分别对应 Linux、macOS 与 Windows 下的安装、卸载和工具更新exe 为封装好的可执行文件py 脚本承担补丁与客户机工具下载的核心逻辑readme 则记录了适用产品版本、依赖条件与已知限制。目前已有 2474 人学习。读者可从中获得覆盖 Workstation、Player、Fusion 与 ESXi 的多平台打补丁与还原方案以及新硬件版本虚拟机启动异常时的参数调整与排错思路便于快速搭建 macOS 实验环境。1. 一台能跑 macOS 10.12.6 的虚拟机卡在了补丁这一步去年帮某实验室整理一套跨平台测试环境需要在一台 Windows 主机上用 VMware 起一个 macOS 10.12.6 虚拟机跑几个只有旧系统才能验证的构建脚本。VMware 装好、镜像也备齐了新建虚拟机时客户机操作系统那一栏从头翻到尾就是没有 Apple Mac OS X。后来才想起 unlocker208 这个必备补丁——它做的事不复杂把 vmwarebase.dllWindows或 vmware-vmxLinux里被屏蔽的苹果客户机类型打回来让向导重新出现 Apple Mac OS X 10.12 的选项。听起来像一步到位的事实际翻车点不少双击脚本闪退、打完补丁向导里依旧没有苹果选项、虚拟机开机走到白苹果就黑屏。这套环境在跨平台开发和老系统兼容测试里很常见下面按平台把安装、配置和排查一步步写清楚。2. 版本对齐unlocker208 和 VMware 11/12 的对应关系unlocker 这个工具的版本号不是随便起的每一个 2.0.x 都绑死了它能处理的 VMware 大版本。它做的事情是往 VMware 的二进制文件里改字节、补字符串把客户机列表里原本被关掉的 Apple Mac OS X 类型重新打开。VMware 每次大版本升级vmwarebase.dll 和 vmware-vmx 的内部结构、字符串偏移都会变脚本拿着旧版本的偏移去改新版本的文件轻则改完没效果重则把 VMware 主程序改到起不来。所以装之前先做一件事把主机上 VMware 的版本号确认下来再对照表挑 unlocker 的版本。手上这份 unlocker208配的就是 Workstation 11/12 和 Player 7/12覆盖的 macOS 客户机正好落到 10.11 和 10.12。10.12.6 是 Sierra 的最后一个维护版本VMware 12.5 才开始在官方支持列表里正式写上 Sierra两者是配套的这也是为什么很多老教程里写 macOS 10.12.6 时都点名 unlocker208。2.1 版本对照表别拿 2.0.8 去撬 Workstation 15unlocker 版本对应 Workstation对应 Player覆盖的 macOS 客户机2.0.711710.10 / 10.112.0.811 / 127 / 1210.11 / 10.122.0.9141410.13 及以后这张表里最容易踩的坑是「版本越新越好」的直觉。有人主机上是 Workstation 15翻出一份 unlocker208 就往上怼脚本跑完提示成功重启 VMware 却直接报初始化失败因为补丁改到了错误的代码段。反过来Workstation 12 上用了更高版本的 unlocker同样会因为找不到目标偏移而中途退出。unlocker 的版本要跟着 VMware 走不是跟着 macOS 走。还有一个细节Workstation 和 Player 共用同一套内核组件vmware-vmx所以同一个 unlocker 版本能同时覆盖两者但前提是它们的大版本号落在表里。如果主机上装的是 Workstation 12.5.x 这类小版本更新2.0.8 一般都能正常工作因为小版本之间二进制布局变化不大跨大版本就不要再试了。2.2 解压后目录里有什么每个文件什么时候用解压 unlocker208 之后目录结构大致是这样不同人打包方式略有差异但关键文件名基本固定# unlocker208 解压后的典型目录结构 unlocker208/ ├── windows/ │ ├── win-install.cmd # Windows 打补丁入口 │ ├── win-uninstall.cmd # Windows 还原入口 │ ├── win-update-tools.cmd # 把新版 darwin 工具推进虚拟机 │ └── unlocker.exe # 真正改写二进制字节的程序 ├── linux/ │ ├── lnx-install.sh # Linux 打补丁入口 │ ├── lnx-uninstall.sh # Linux 还原入口 │ └── lnx-update-tools.sh └── tools/ ├── darwin.iso # macOS 10.12 及以后用的 VMware Tools └── darwinPre15.iso # 10.11 及以前用的旧版win-install.cmd和lnx-install.sh是入口脚本本身不直接改字节而是先停服务、备份原文件、再调用unlocker.exe做二进制修改。tools目录里的两个 iso 是装完系统之后才用的负责分辨率自适应、剪贴板共享和鼠标不丢帧跟打补丁本身没关系但装 macOS 的整个流程里绕不开它。10.12.6 对应的是darwin.isodarwinPre15.iso留给 10.11 及更早的系统别拿错。2.3 动手前的三项检查第一项VMware 必须完全退出。光关主窗口不够后台的vmware-vmx.exeWindows或vmware-vmxLinux进程、授权服务、NAT 服务都可能还挂着它们会锁住vmwarebase.dll和vmware-vmx脚本写不进去就会中途失败。第二项确认 VMware 的实际安装路径。Windows 默认在C:\Program Files (x86)\VMware\VMware WorkstationLinux 通过 bundle 安装默认在/usr/lib/vmware。如果当初装到了 D 盘或者自定义目录后面所有命令里的路径都要跟着换。# Linux确认安装目录和核心二进制是否存在 ls -ld /usr/lib/vmware ls -l /usr/lib/vmware/bin/vmware-vmx:: Windows确认主程序位置路径里有空格引号不能省 dir C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll第三项动手之前先把整个 VMware 安装目录冷备一份。这比事后逐个找.bak还原快得多尤其当补丁改坏、VMware 起不来的时候整目录换回去是最省事的后悔药。# Linux整目录冷备日期后缀方便回滚时挑版本 sudo cp -a /usr/lib/vmware /usr/lib/vmware.bak.$(date %Y%m%d):: Windows整目录复制一份做冷备 xcopy C:\Program Files (x86)\VMware\VMware Workstation D:\backup\vmware-ws /E /I /H/E表示连空目录一起复制/I表示目标不存在时按目录处理/H表示连隐藏文件一起带上。备份完之后再开始打补丁出任何问题都有退路。3. 两个平台的打补丁流程Windows 的 win-install.cmd 与 Linux 的 lnx-install.sh打补丁本身只有一两分钟真正决定成败的是执行前的准备和执行时的姿势。Windows 上最常见的翻车是「双击」Linux 上最常见的翻车是「路径参数没传对」。两个平台的处理逻辑一样停服务、备份、改写、重启差别只在脚本和路径写法。3.1 Windows右键管理员权限是第一步先说为什么不能双击。Windows 下双击一个.cmd文件当前工作目录会被设成C:\Windows\System32脚本里所有相对路径都会失效unlocker.exe找不到窗口一闪就关。正确做法是用管理员身份打开命令提示符先cd到脚本所在目录再执行。:: 1. 用管理员身份打开命令提示符先切到 unlocker 解压后的 windows 目录 cd /d D:\tools\unlocker208\windows :: 2. 停掉 VMware 的后台服务否则 vmwarebase.dll 会被占用 net stop VMware Authorization Service net stop VMware NAT Service net stop VMware DHCP Service :: 3. 执行安装脚本脚本内部会调用 unlocker.exe 改写二进制 win-install.cmdcd /d里的/d是跨盘符切换用的从 C 盘切到 D 盘必须加否则cd只会在当前盘符里找目录。三条net stop里VMware Authorization Service最关键它持有授权库文件NAT 和 DHCP 服务停掉是为了让vmware-vmx不被占用。脚本执行后正常会依次输出备份、打补丁、完成三类信息如果中途只看到备份没有打补丁多半是unlocker.exe没有被正确调用。执行完之后用一条命令确认补丁是否落盘:: 查看备份是否生成同名 .bak 文件就是补丁前的原件 dir C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll*输出里应该同时出现vmwarebase.dll和vmwarebase.dll.bak后者的修改时间就是补丁执行的时间。如果只有.dll没有.bak说明脚本在备份阶段就失败了这时候不要急着重跑先去看脚本窗口里的报错。万一补丁打完 VMware 起不来还原也很直接:: 方式一跑自带的还原脚本 cd /d D:\tools\unlocker208\windows win-uninstall.cmd :: 方式二手动把 .bak 改回原名VMware 完全退出后操作 ren C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll.bak vmwarebase.dll ren C:\Program Files (x86)\VMware\VMware Workstation\vmware-vmx.exe.bak vmware-vmx.exe手动还原要在 VMware 完全退出、服务全停的状态下做否则文件被占用ren会报拒绝访问。还原完之后再按 3.3 的方式重启服务。3.2 Linux路径参数不能省Linux 上的脚本是lnx-install.sh它需要知道 VMware 装在哪儿。有的打包版本会要求把安装根目录作为第一个参数传进去不传就默认当前目录结果当然找不到vmware-vmx。执行前先看脚本开头几行的用法说明再按实际路径传参。# 1. 确认 VMware 装在 /usr/lib/vmware ls -ld /usr/lib/vmware ls -l /usr/lib/vmware/bin/vmware-vmx # 2. 停止 VMware 相关服务服务不存在时也不中断 sudo systemctl stop vmware.service 2/dev/null || true sudo systemctl stop vmware-workstation-server.service 2/dev/null || true # 3. 进入 unlocker 的 linux 目录执行参数是 VMware 安装根目录 cd /opt/tools/unlocker208/linux sudo ./lnx-install.sh /usr/lib/vmware2/dev/null || true的作用是服务不存在时把错误吞掉、命令继续往下走避免因为某个服务名对不上就中断整段脚本。sudo不能省/usr/lib/vmware归 root 所有普通用户写不进去脚本会在备份阶段就报权限错误。如果安装时用的是发行版仓库里的 VMware 包路径可能不是/usr/lib/vmware用which vmware或ls /usr/bin/vmware反查实际位置。执行完之后同样确认.bak是否生成# 查看 vmware-vmx 和它的备份确认补丁写过 ls -l /usr/lib/vmware/bin/vmware-vmx*Linux 下要盯的还有一个隐藏问题脚本内部靠python命令调用二进制补丁逻辑新一些的发行版默认只有python3没有python这个别名脚本跑到一半就会停住。这个放到第 5 章细说先记住如果输出里出现python: command not found就是它。还原同样走自带脚本# 还原把补丁前的二进制换回来 cd /opt/tools/unlocker208/linux sudo ./lnx-uninstall.sh /usr/lib/vmware3.3 打完补丁之后的收尾重启服务和主程序补丁写进磁盘不代表 VMware 会用上它。已经在内存里跑着的进程仍然持有旧二进制的句柄必须先把 VMware 彻底退干净再重新启动新建虚拟机向导里才会出现 Apple 选项。:: Windows把之前停掉的服务重新拉起来 net start VMware Authorization Service net start VMware NAT Service net start VMware DHCP Service# Linux服务重新启动然后重新打开 VMware sudo systemctl start vmware.service 2/dev/null || true顺序上建议先起服务再开主程序尤其是 Windows 下授权服务没起来的时候VMware 会提示许可证问题。如果图省事直接把机器重启一遍也行效果一样只是慢一点。重启之后先别急着建虚拟机打开新建向导翻一下客户机操作系统列表看到Apple Mac OS X并且版本下拉里有10.12说明补丁这一步已经成了剩下的就是 vmx 参数的事。4. vmx 参数配置让 macOS 10.12.6 认下这块虚拟硬盘打补丁解决的是「VMware 愿不愿意让你选 Mac」vmx 参数解决的是「macOS 愿不愿意在这台虚拟机上开机」。这两件事经常被混为一谈结果就是补丁打成功了、向导里也有 Apple 选项了虚拟机一开机走到白苹果进度条一半就黑屏重启或者直接掉出一个禁止符号。4.1 为什么只打补丁不够VMware 用 SMC系统管理控制器模拟苹果主板上的那颗芯片顺便把 board-id、机型标识这些信息一并虚拟出来。macOS 在启动早期会检查 SMC 版本和 board-id 是否匹配不匹配就直接选择关机。unlocker 只是把客户机类型解锁了并没有改动这些虚拟硬件的默认值所以第一次开机大概率会卡在校验这一步。这也是为什么网上大量教程在讲完 unlocker 之后都会补一句「记得在 vmx 里加 smc.version 0」。10.12.6 这个版本对这一行尤其敏感缺了它白苹果进度条基本走不过三分之一。4.2 关机后往 vmx 里补三行vmx 文件在虚拟机目录里文件名和虚拟机同名扩展名是.vmx。编辑之前必须先把虚拟机关机运行状态下改这个文件VMware 退出时会把内存里的配置写回去手改的内容会被覆盖。# 追加到虚拟机配置文件 macOS10126.vmx 末尾编辑前先关机 smc.version 0 board-id.reflectHost TRUE hw.model iMac17,1smc.version 0是绕开 SMC 版本校验的关键行把版本号伪造成一个 macOS 认得的旧值让启动流程能继续往下走。board-id.reflectHost TRUE让虚拟机把主机的 board-id 映射过去白苹果进度条走完之后不容易掉到禁止符。hw.model指定虚拟出来的 Mac 机型iMac17,1对应 2015 款的 27 寸机型能正常跑 Sierra也能让后续装 VMware Tools 时的分辨率适配更顺。三行都加上之后保存再开机。如果还是掉禁止符把hw.model换成MacPro6,1再试一次不同主机 BIOS 下机型识别的表现会有差异这是玄学部分多试一两个值通常能过。4.3 硬件面板里要调的五个选项vmx 参数之外虚拟机的硬件配置也有几个默认值不适合 macOS。新建完虚拟机、还没第一次开机之前进设置面板按下面的建议调一遍选项建议值原因硬盘类型SATAmacOS 安装器不认默认的 SCSI 控制器会找不到磁盘光驱类型SATA安装介质要从 SATA 通道识别SCSI 下经常读不到USB 控制器xHCIEHCI 下键鼠容易漂移或完全没反应显存128 MB安装界面和后续分辨率都靠它低于 64 MB 会花屏内存4 GB 起低于 2 GB 安装器大概率卡在语言选择界面安装介质这边常见做法是拿到官方的InstallESD.dmg之后转成虚拟机可用的磁盘格式或者做成启动盘再挂给虚拟机。这一步和 unlocker 无关但顺序上要排在补丁和 vmx 参数之后否则装到一半发现客户机类型不对前面白忙。5. 常见问题排查补丁打了还是没苹果选项、开机掉禁止符5.1 补丁跑完新建向导里没有 Apple Mac OS X现象win-install.cmd或lnx-install.sh执行完没有报错重启 VMware 之后新建虚拟机客户机列表里仍然只有 Windows、Linux、其他这几项。原因最常见的两种情况一是 VMware 在打补丁时没有完全退出vmwarebase.dll被后台进程占用脚本跳过了改写步骤但没报错二是补丁版本和 VMware 版本对不上脚本找到了文件但偏移量不对改了个寂寞。解决先确认进程。Windows 下打开任务管理器把所有带 VMware 字样的进程结束掉包括vmware.exe、vmware-vmx.exe、vmware-authd.exeLinux 下用ps -ef | grep vmware查一遍。然后重新以管理员/root 身份跑一次安装脚本这次盯着输出看有没有patching之类的字样。如果输出里明确写了 backup 但没写 patch回去核对第 2 章的版本对照表。5.2 Windows 上双击脚本一闪就没现象双击win-install.cmd黑窗口闪一下就关闭VMware 安装目录里没有任何.bak文件生成。原因双击时当前工作目录被设成C:\Windows\System32脚本里用相对路径找unlocker.exe找不到直接退出另外双击默认不带管理员权限即使找得到文件也写不进 本文还有配套的精品资源点击获取