前几天同事抱着一台笔记本过来,双击SolidWorks 2020图标,启动画面闪完就弹出一行红色错误:“无法获得下列许可 SolidWorks standard,期望的SolidWorks监控程序已经关闭(-97,121,0)”。他一开口就问我要不要重装SolidWorks,我拦住他说你先别急,这个报错跟软件本体还真没多大关系,问题出在“许可服务”那一层。
写这篇东西的初衷,就是因为我发现太多人被这个报错搞得直接重装系统、重装软件,折腾一整天最后发现原因可能只是某个服务没起来。这篇内容既适合第一次遇到这个问题的小白,也适合已经排查过一轮但没搞定的人参考。我会把SolidWorks 2020许可服务的工作原理、完整排查链路、修复方案,以及后面防止复发的几个隐蔽坑一次性说清楚。
1. “监控程序已经关闭”到底是谁断了
1.1 这个报错的前因后果
SolidWorks 2020(包括其他较新版本)在网络上获取许可时,依赖的是FlexNet Publisher这套许可技术。你安装SolidWorks时,系统里会装上一个后台服务,名字通常叫SolidWorks Flexnet Server,或者叫SolidNetWork License Manager,视安装组件而定。这个服务的作用就是管理许可的“发放”:当SolidWorks启动时,客户端程序会向这个服务发出请求,服务端验证许可文件后,把一个可用席位分配给客户端,SolidWorks才允许你进入界面。
你看到的“期望的SolidWorks监控程序已经关闭”,里面说的“监控程序”,指的就是这个许可服务进程。FlexNet客户端在启动时不只是要求能连上服务端口,它还会盯着服务端进程是否一直保持活动状态。如果服务没有启动、进程崩溃、或者中途被系统停掉,客户端就会捕获到“服务端程序关闭”的信号,于是显示这个报错。换成人话就是:SolidWorks主程序已经准备开门进去了,结果发现看门的人不在岗,直接把你拦在门外。
1.2 为什么SolidWorks 2020是重灾区
网上随便一搜,SolidWorks 2020的许可报错帖子数量明显比老版本多,这不是错觉。一个是安装方式导致的:2020在安装时,许可服务端的安装目录、服务名和旧版本不完全一样,很多公司是旧版直接覆盖升级过来的,注册表和服务项容易残留。残留的旧服务项指向一个不存在的路径,新服务又没成功注册,结果就是服务根本起不来,客户端连不上,报错。
另一个因素是系统环境。SolidWorks 2020发布后在不少Windows 10版本上跑,特别是后来更新的Windows 10 22H2这类版本,系统组件升级可能把服务的启动类型从“自动”改为“手动”甚至“禁用”,或者把服务依赖关系弄断,导致开机后服务不自动运行。SolidWorks主程序本身没坏,但后台服务已经瘫痪了,于是报错随机出现,时好时坏。
1.3 错误码-97,121,0到底在说什么
很多人看到“-97,121,0”这串数字就发怵,其实FlexNet的错误码是由主错误码和子错误码组成的。“-97”大致属于FlexNet客户端错误族,含义可以理解为“许可服务无法正常提供许可”。后面的“121,0”则对应内部状态,一般指向服务端进程退出或者通信阶段中断。实操角度来讲,你不需要背下这些数字的精确含义,只需要明白一个关键结论:问题的根源在许可服务端,不在SolidWorks主程序。
这个认知很重要。为什么那么多人重装SolidWorks主程序后问题依旧?因为客户端装得再干净,服务端还是没起来,错误当然原样奉还。所以下次看到这个报错,先别动SolidWorks本体,往服务那一层去查。
2. 别急着重装:从服务状态到日志文件的完整排查链路
2.1 第一步:在服务管理器里确认FlexNet服务是否“活着”
按Win+R输入services.msc回车,打开服务管理器,列表里找到名称带“Flexnet”或“SolidWorks Flexnet”的服务,不同版本名称可能略有差异,有的叫“SolidWorks Flexnet Server”,有的直接叫“FlexNet Server”。观察两个信息:
- 状态列是不是“正在运行”,如果不是,说明服务没起来。
- 启动类型列是什么,如果显示“手动”或“禁用”,基本可以断定问题就在这。
这时候不要急着右键启动,先双击服务打开属性,把启动类型改为“自动”,然后点“启动”。如果启动报错,注意看错误码并记下来,比如1067是指进程意外终止,1053指服务没有及时响应,这些信息在后面决策时很有用。如果服务能正常启动,去任务管理器里确认一下进程是否真的存在,然后直接打开SolidWorks试一次。
2.2 第二步:进程视角——服务显示“正在运行”不等于一切正常
有一个比较迷惑的情况:服务管理器里显示“正在运行”,但SolidWorks还是报同样的错。这时打开任务管理器,切到“详细信息”标签页,找lmgrd.exe进程。如果服务状态正常但lmgrd.exe不在,说明服务进程启动后又立刻退出了,只是服务管理器没来得及更新状态。
另一种情况:lmgrd.exe在跑,但SolidWorks仍连不上。那可能是许可服务启动到了中途某一步卡住了,比如加载许可文件失败,服务进程虽然挂着但实际已经丧失响应能力。这时候就要进入第三步,看日志,别再靠猜了。
2.3 第三步:看FlexNet日志,别靠猜
FlexNet服务是会写日志的,日志文件通常放在这几个位置之一:
C:\Program Files (x86)\Common Files\SolidWorks Shared\SolidWorks Flexnet\logsC:\SolidNetWork License Manager\logs- 如果你自定义过SolidNetWork License Manager的安装目录,日志就跟随安装目录走
打开日志文件夹,找lmgrd.log或者debug.log这类文件,用记事本打开后搜索关键词:error、denied、cannot connect、timeout。日志会直接告诉你服务启动失败的原因,比如端口被占用、许可文件路径无效、或者某个依赖项不存在。我遇到过好几次,用户折腾半天,日志里明明白白写着端口被占,五分钟就定位了。
2.4 第四步:端口占用检查
SolidWorks FlexNet的默认端口通常是25734和25735,前者用于许可服务通信,后者用于SolidNetWork License Manager管理界面。打开命令提示符,输入:
netstat -ano | findstr "25734" netstat -ano | findstr "25735"如果能看到LISTENING状态,说明端口正常。如果没有任何输出或者显示TIME_WAIT,说明服务可能没真正监听。如果端口被其他程序占用,需要要么停掉占用进程,要么修改FlexNet配置换一个端口。这个场景不算常见,但一旦遇到就是那种“怎么查都查不出原因”的坑。
3. 修复实操:从重启服务到重建许可组件的完整方案
3.1 最保守的修复:重启服务并设置自动启动与恢复选项
如果排查后只是服务停了,那就直接右键启动服务,然后启动类型设为“自动”。但这里我要强调一件事:别急着关掉服务管理器,切到“恢复”标签页,把“第一次失败”和“第二次失败”都选成“重新启动服务”,“重置失败计数”填1天。这一步很多人忽略,结果就是服务今天启动了,明天开机又不起来,SolidWorks继续报错。
服务恢复选项的意义在于,当服务因为某个瞬时原因退出时,系统会自动把它拉起来,而不是放任不管。尤其是使用笔记本的用户,休眠唤醒后服务经常出异常,有了这个设置,至少能减少一半的复发概率。这个操作花费三十秒,但能省掉后面大量时间。
3.2 服务组件损坏:用SolidNetWork License Manager重建
如果服务启动时报错,或者启动后过几秒又停了,说明服务组件可能已经损坏。这时候用SolidWorks自带的管理工具来修复,比你手动改注册表安全得多。在开始菜单SolidWorks工具组里找到SolidNetWork License Manager,打开后在许可服务器设置里重新指定许可文件位置(通常是.lic或.dat文件),保存后它会自动重新注册服务、重新加载配置。
这个工具的核心价值是“用官方方式重建服务关系”。你不需要自己去碰注册表,它会把服务路径、依赖关系、启动参数一次性写对。很多人在服务损坏后手动改服务配置,结果路径写错一个字符就彻底起不来,反而越弄越糟。
3.3 再不行就修复安装或彻底重装FlexNet组件
如果SolidNetWork License Manager也打不开,或者重建后依然报错,那就需要走修复安装这一级。到控制面板的“程序和功能”里,找到“SolidWorks Flexnet Server”或“SolidNetWork License Manager”,右键选择“更改”,在弹出的界面里选“修复”。修复过程会自动重装缺失的文件并重建服务,完成后重启电脑再试。
如果修复安装还不行,就只能彻底卸载重装FlexNet组件。注意:不建议手动去删注册表,最好用官方卸载工具把SolidWorks FlexNet相关组件清干净。卸载完成后,手动删除残留的日志和许可文件目录(比如C:\SolidNetWork License Manager残留文件夹),然后重新安装FlexNet组件,再通过SolidNetWork License Manager加载许可文件。这一步相当于白纸重画,基本能解决99%的服务端损坏问题。
3.4 “以管理员身份运行”为什么不是形式主义
SolidWorks 2020的许可服务在安装、注册服务、写日志、加载许可文件时,全部涉及系统级权限。如果你平时使用标准账户登录Windows,或者UAC弹窗时点了“否”,服务可能只装了一半就被打断了。我见过不少案例,服务显示存在但状态极其异常,就是因为安装过程中权限不足,关键文件没写进去。
所以从安装FlexNet组件,到运行SolidNetWork License Manager,再到打开SolidWorks 2020,这三个环节都建议右键“以管理员身份运行”。这不是玄学,是FlexNet服务这一层确实需要管理员权限去做系统级操作。另外,如果你是公司IT帮忙装的软件,许可服务一般跑在服务器上,那你本地装的就是客户端组件,这时候的排查重点会稍微不同,但服务层逻辑是相通的。
4. 修好之后依然偶发的两个隐蔽元凶
4.1 安全软件悄悄结束lmgrd.exe
有一种很刁钻的场景:服务设置好了,系统重启后也正常,但用个几天又报错了。这时候去任务管理器看,lmgrd.exe不在,服务状态又显示“正在运行”。这种情况,十有八九是安全软件在背后搞动作。
杀毒软件、系统优化工具、甚至Windows Defender,都可能把lmgrd.exe当作可疑程序隔离或强制结束。解决方式是把许可服务安装目录加入杀毒软件的白名单/排除项,比如C:\Program Files (x86)\SolidWorks Corp\SolidNetWork License Manager,以及FlexNet相关的安装目录。如果你用的是第三方杀毒软件,还要看一下它的“主动防御”或“行为监控”日志,确认它不是每天都在拦这个进程。
4.2 休眠唤醒后服务“失联”
笔记本用户特别容易遇到:头天晚上合盖休眠,第二天打开电脑直接启动SolidWorks,结果又报“监控程序已经关闭”。原因是笔记本休眠后,网络适配器和后台进程的状态会被挂起,FlexNet服务对应的一些底层资源在唤醒后没有正确恢复,服务进程虽然显示在,但实际上已经“假死”了。
最简单的应对办法是:休眠唤醒后先不要直接开SolidWorks,手动重启一次FlexNet服务,然后等几秒再打开软件。如果你不想每次手动操作,可以写一个批处理脚本,内容就是重启服务的命令,放在桌面,每次唤醒后双击一下。虽然笨,但实测很管用。更省心的方案我放在下面一节说。
4.3 用任务计划程序给许可服务加一道保险
比手动重启更优雅的方案,是用Windows任务计划程序创建一个延迟启动任务。核心思路是:让SolidWorks Flexnet Server不在系统开机的一瞬间启动,而是推迟一分钟左右再启动。为什么要这样?因为开机阶段系统资源占用极高,杀毒软件也在做全盘扫描,服务很容易在启动过程中被打断。延迟启动能避开这个拥挤时段,服务起来得更稳。
创建方式很简单:打开任务计划程序,新建任务,触发器选“开机时”,延迟1分钟;操作选“启动程序”,程序填sc.exe,参数填start "SolidWorks Flexnet Server"。这里的服务名要和你系统里服务管理器显示的名称完全一致。设置好之后,每次开机系统都会在1分钟后自动拉起服务,大大降低随机报错概率。我在几台公司电脑上验证过,效果稳定。
5. 同类许可报错横向对比:-97,121,0与-96、-8544怎么区分
5.1 我整理的SolidWorks常见许可错误码对照表
| 错误码 | 报错特征 | 优先排查方向 |
|---|---|---|
| -97,121,0 | 期望的SolidWorks监控程序已经关闭 | 服务状态、lmgrd.exe进程、FlexNet日志 |
| -96 | 无法连接到许可服务器,连接超时 | 网络连通性、服务器IP/端口配置、防火墙 |
| -8544 | 无法获得许可,服务未就绪 | 服务是否启动、服务依赖项、许可服务版本 |
| -15,10 | 许可文件无效或签名不匹配 | 许可文件内容、证书更新、服务器时间 |
| -33 | 找不到指定的许可服务器 | 许可服务器地址配置、hosts或环境变量 |
这张表不完整,但覆盖了90%以上日常遇到的SolidWorks许可类问题。它的价值在于帮你快速圈定排查范围,而不是对着一个错误码瞎折腾。
5.2 先看错误码再定排查方向的好处
以前我处理这类问题喜欢从头到尾全面查一遍,后来发现效率太低。现在我的习惯是:先看错误码归到哪一类,再决定从哪个层面入手。报-97系列,先看服务端进程和日志;报-96,先测网络连通性;报-8544,直接查服务状态。方向对了,很多问题十分钟内就能解决,方向错了,重装三遍也白搭。
这里也提醒一句:网上搜到的报错解决方案,一定要先确认错误码是否匹配再照着做。同一个“无法获得许可”的提示,-96和-8544的处理方式完全不同,跟着不匹配的方案操作,轻则浪费时间,重则把原本正常的环境也弄坏了。
6. 按我的习惯做的最终验收清单
问题修复后,我一般不会直接关机走人,而是按一份简单的验收清单确认一遍,确保下次开机不会再犯。
- 服务管理器中,FlexNet服务状态为“正在运行”,启动类型为“自动”。
- 服务“恢复”选项卡里,失败后自动重启服务已设置。
- 任务管理器中能看到
lmgrd.exe进程存在。 - FlexNet日志文件里没有新增error级别的报错。
- 防火墙和安全软件已放行FlexNet相关目录和25734/25735端口。
- 以管理员身份启动SolidWorks 2020,连续启动退出三次,确认不再弹报错。
这一套走下来,基本能把-97,121,0这个问题斩草除根。
最后分享一点个人体会:这类许可服务问题,90%以上不需要重装系统,大多数时候也不需要重装SolidWorks主程序。遇到报错先截个图存下错误码,再按服务层逻辑逐层排查,你会发现自己动手解决比找IT快得多。等你把服务“恢复”选项和延迟启动任务提前设好,后面基本不会再被这个问题烦到了。