
前几天同事抱着一台笔记本过来双击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服务是否“活着”按WinR输入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快得多。等你把服务“恢复”选项和延迟启动任务提前设好后面基本不会再被这个问题烦到了。