VMware Workstation Pro安装时弹出一句提示:用户在命令行上发出了 EULAS_AGREED=1,表示不接受许可协议。我第一次处理这个问题时,第一反应是去找命令行窗口——我到底什么时候给安装程序传过参数?后来才发现,问题根本不在你的手边,而是安装程序自己的参数校验逻辑在“闹脾气”。这句话很唬人,因为字面上“EULAS_AGREED=1”明明就是“许可协议已接受”,怎么会被解读成“不接受”?更麻烦的是,它往往在你正常双击安装包时也会出现,导致很多人反复重试、反复失败,卡在同一个地方出不来。
这篇文章不打算只给你一个“删注册表”的偏方,而是先把这个提示背后的原理讲透,再给一条从简单到彻底的排查链路。不管你是普通用户自己重装VMware Workstation Pro,还是IT管理员要给办公室电脑批量部署,都可以按文章顺序一步步来,没有命令行基础的人也能照着操作。
1. 为什么 EULAS_AGREED=1 反而被解读成“不接受许可协议”
1.1 先拆一下安装包:引导程序 + MSI
很多人误以为VMware Workstation Pro的安装过程只有一个exe在干活,实际上它是两段式结构。外层是一个引导程序(Bootstrapper),负责解压安装包、检查系统环境、加载必要的依赖组件;内层才是真正的MSI安装引擎,负责写文件、写注册表、配置服务。这种双层设计在商业软件里很常见,好处是厂家可以在同一套引导层里做版本判断、推送更新,然后把核心安装动作交给Windows Installer统一管理。
理解了这个结构,你再看 EULAS_AGREED=1 就清晰了:它不是给引导程序用的,而是给内层MSI引擎用的一个属性。属性名里的EULAS是“End User License Agreement”的缩写,后面的 AGREE=1 表示“协议已同意”。引导程序负责判断是否需要显示“我接受许可协议”的勾选框,而真正记录协议状态、决定能不能继续装下去的,是内层MSI引擎。这两个层各管一摊,一旦参数传递出了问题,就会出现开头那句让人摸不着头脑的提示。
1.2 引导程序的“非黑即白”判断逻辑
在正常交互式安装里,你手动勾选“我接受许可协议中的条款”,点击“下一步”,引导程序把这个UI动作转换成MSI属性传给内层引擎,安装顺利继续。而当你通过命令行传入 EULAS_AGREED=1 时,逻辑上等于是提前告诉安装程序:不用弹协议确认界面了,用户已经在命令行层面同意了,直接装吧。
问题在于,VMware引导程序对参数组合的校验非常严格。它期望的是“EULAS_AGREED=1 配合 /s、/v 等静默安装参数一起出现”,如果只有这个属性传进来了,而其他条件不满足,引导程序会认为“有人通过命令行强行塞进来一个属性,但整个安装流程并没有按静默安装的逻辑走”。在这种情况下,它宁可把状态回退为“协议未接受”,也不愿意冒险继续往下走。于是你就看到了这句“表示不接受许可协议”的提示。
这个文案真正的问题出在翻译上。英文原文大致是“you have specified EULAS_AGREED=1 on the command line, indicating that you do not accept the license agreement”,本质上是引导程序在参数校验失败后的一个默认判断分支,并没有人去检查你到底是不是真的不同意协议。说白了,这是软件开发者的“懒人逻辑”:条件不完整,就默认拒绝。
1.3 最常见的真实触发场景
根据我处理过的案例,这个错误出现频率最高的场景基本是这几类:
- 上一次安装残留了安装参数或状态,比如你用静默安装命令装到一半主动终止了,或者公司域策略推送过安装脚本,导致注册表里留下了EULA状态标记。
- 电脑上装过旧版VMware Workstation或VMware Player,卸载不彻底,新版引导程序检测到旧注册表里的EULA记录不匹配。
- 使用的是网上下载的第三方修改版安装包,参数被二次封装修
