ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Creo报License request failed?从错误码到环境变量的排障全攻略

Creo报License request failed?从错误码到环境变量的排障全攻略 License request failed for feature大概是Creo用户最不想看到的一句话尤其是眼瞅着交付节点就在眼前软件却卡在启动这一步。我在企业里做CAD/PLM环境支持这十几年处理过无数台Creo客户端的这类报错也见过许可证服务器配置翻车的现场。这篇文章不打算堆一堆官方文档术语我把实际排查中遇到过的所有可能原因、判断方法和修复操作整理一遍谁再碰到这个Creo报许可证错误按下面顺序来基本能少走很多弯路。先说个总原则报错弹窗不等于根因弹窗下方那行小字才是。开始以前务必把报错信息完整抄下来尤其要记清楚feature名和最后一个数字错误码。接下来我按服务端到客户端的顺序把手里的排障思路整个过一遍。1. 报错信息的真实含义不是所有License request failed都长一个样1.1 错误码就是排错地图-9、-15、-97各代表什么Creo启动时报这个错弹窗里通常还有更多信息。典型的长这样License request failed for feature Proe_200: -9feature名可能是Proe_200、Proe_FlexEng也可能跟你们实际购买的模块有关。真正要命的是后面那个数字这个数字就是FlexNet的错误码它才是排错的地图。我刚入行时也吃过亏看到-9、-15、-97这些数字只觉得是一堆乱码后来才明白FlexNet每个错误码都有固定含义。误差比较多见的是这几个错误码一句话含义排查方向-4 / -8找不到许可证服务器主机的地址先查hosts和主机名拼写-9网络连不上服务器但主机名能找到查服务、端口、防火墙-15服务器进程没在运行或网络根本不通查服务状态、网络-96 / -97vendor daemon掉了或feature不在授权范围查服务端日志和license文件-5服务端没有这个feature查feature名和授权内容-33服务端版本和客户端不匹配升级或降级匹配版本看到-4和-8基本不用查服务器客户端配置的问题更大看到-96和-97在客户端怎么折腾都白搭必须上服务器。这张表并不复杂但它能在排障第一步就帮你分流省掉大量无用功。1.2 Creo启动找授权链路其实就三段Creo启动时找license本质上和手机连路由器差不多。license.dat文件里的SERVER行相当于告诉你路由器叫什么名字、入口在哪lmgrd是路由器的主服务负责接收客户端请求ptc_d是路由器下面管具体业务的服务负责检查你要的功能我是不是有、授权数够不够。三个阶段分别是客户端通过license.dat里的SERVER行找到服务器地址和端口lmgrd收到请求把请求转给vendor daemon进程ptc_dptc_d核对授权和剩余数量没问题就把license签发给客户端。这三个阶段对应到排查顺序先查服务端状态再查客户端配置最后查网络链路。这也是后面几个章节的结构先把服务端问题排除掉再处理客户端解析最后回头看各种环境干扰。理解了这条链路你再看排错方向就清晰了不会被一行报错吓住。2. 先从服务端下手lmstat、lmgrd日志和feature名核对2.1 Windows服务没起来这是-15的头号来源拿到-9或-15我通常建议直接把目光放到许可证服务器上绝大多数情况是服务端根本没在服务。许可证服务器很多人装完之后就再也没看过Windows一更新、服务器一重启服务没设成自动启动问题马上就来了。在服务器上按WinR输入services.msc找到FlexNet License Server相关的服务看状态。如果Status不是Running右键启动然后打开服务属性把Startup type改成Automatic。这两步做完能解决掉一大半-15问题。这里有个细节容易踩某些服务器安全加固策略会把服务的登录身份设置成普通用户而普通用户对license.dat所在目录没有读取权限服务启动后秒退。所以启动类型改完顺手确认一下登录账户是不是Local System Account或者至少有权限访问license文件目录。2.2 lmstat -a一条命令看清授权余量和daemon状态服务起来了还报错那就动真格的用FlexNet自带工具看内部状态。工具一般在PTC安装目录下常见位置是C:\Program Files\PTC\FlexNet\bin目录下能找到lmutil.exe或者lmstat.exe。执行lmstat -a -c C:\path\to\license.dat把路径换成实际license.dat的位置。输出内容比较多抓三个重点就行。一是Server lines这一部分看lmgrd是否UP二是Vendor daemon status部分看ptc_d是否UP三是Users of xxx对应的feature看当前在用数量是不是已经到了Total上限。如果ptc_d显示DOWN那基本断定是license.dat内容有问题或授权文件格式不对。这里最常见的情况是license.dat里的字符合法编码出了问题。我处理过一台服务器license.dat是从邮件里复制粘贴的引号被邮箱系统自动换成了中文全角引号lmgrd解析的时候直接崩掉ptc_d自然起不来。以ASCII方式重新保存文件后问题解决。所以拿到license.dat第一时间检查文件编码和每行的分隔符别问为什么问就是全是泪。2.3 lmgrd日志里藏着真正的死亡原因lmstat只是告诉你现在坏了没告诉你为什么坏。真正能告诉你原因的是lmgrd.log路径一般和license.dat在同一个目录。打开后直接看最后几十行如果ptc_d退出日志里会写退出码和原因。比如我见过有些日志写着Invalid license key有些是Missing environment variable有些是端口被占用还有些是Admin license file overwritten这类提示。看到日志里具体哪一行报错就去license.dat里定位那一行。很多时候就是授权文件里多了一个不可见字符、少了某个保留字段肉眼很难发现但日志会直接告诉你行号或者特征名照着改就行。改完后记得重新启动许可证服务让lmgrd重新读取文件。还有一个容易忽略的license.dat文件修改后lmgrd不会自动加载新内容必须重启服务。有些管理员图省事只刷新了客户端结果客户端怎么试都连不上白折腾半小时。3. 客户端连不上服务器hosts、端口和连通性测试3.1 主机名解析失败界面就会出现-8/-9服务端一切正常lmstat里feature也在那问题大概率卡在客户端找不到服务器这一层。这个环节我见到最多的坑反而不是复杂的网络问题而是hosts文件、主机名、端口这三个低级问题。Creo的license.dat里SERVER行通常写成下面这种格式SERVER license-server 00-1A-2B-3C-4D-5E 7788SERVER行的第二个字段是服务器主机名。如果客户端解析不了这个主机名报错就会是-8或-9。很多企业内部没有内部DNS或者DNS缓存有问题最简单的办法是在客户端的hosts文件里加一行静态映射192.168.10.50 license-server然后在客户端license.dat里把SERVER行的主机名改写成短主机名甚至直接用IP地址。hosts文件在Windows下的路径是C:\Windows\System32\drivers\etc\hosts改完hosts不必重启电脑只要把Creo整个关掉再启动让license配置重新读取即可。这里提醒一句如果有多台客户端都连同一个服务器hosts映射要在每台电脑上都加别指望一台改了全员生效。3.2 license.dat里的端口和服务端监听端口对不上FlexNet默认端口通常是7788但PTC许可证服务器在安装时可以指定其他端口。客户端license.dat里SERVER行的第三个数字必须跟服务端实际监听的端口一致。怎么确认服务端在听哪个端口在服务器上执行netstat -ano | findstr 7788Linux服务器用netstat -tunlp | grep 7788看到LISTEN状态的进程说明这个端口在正常监听。如果服务端监听的是27000而客户端license.dat写的是7788那自然是各种连不上。这个问题排查起来很快但确实坑了不少人特别是公司IT网络策略比较严格端口被安全组拦截的情况也偶有发生。3.3 telnet和Test-NetConnection两秒定位网络层故障我先把这招列为每个CAD管理员必会的基础操作。在客户端电脑上打开CMD执行telnet 192.168.10.50 7788如果端口通窗口会变成黑屏或者显示一个光标如果端口不通会提示无法打开到主机的连接。这个测试能瞬间把问题定位到网络连通性还是软件层面比在Creo里反复重启试错高效多了。Windows 10/11默认可能没装telnet客户端不想装的话用PowerShell更顺手Test-NetConnection 192.168.10.50 -Port 7788返回TcpTestSucceeded : True就说明端口通网络链路没有障碍。如果TcpTestSucceeded是False那就往下走先ping服务器IP通不通ping不通查网络分段和物理链路ping得通但端口不通查防火墙和安全策略。4. MAC地址、多网卡与节点锁定最隐蔽的授权杀手4.1 为什么换驱动、装虚拟机软件后突然报错这类问题最隐蔽报错信息也最迷惑。服务器端一切正常客户端配置也没问题但Creo就是起不来而且换了网卡驱动、装了虚拟机软件之后连原本能用的环境也开始报错。说白了PTC/FlexNet的节点锁定授权底层其实是在通过MAC地址验证这台机器是不是授权机器。很多license.dat里会有VENDOR行后面跟着一串根据网卡MAC生成的校验信息也就是俗称的网卡锁。Creo启动时vendor daemon会取本机某一特定网卡的MAC去做校验取到的跟license.dat里写的不一致授权立刻无效。常见触发场景包括重装系统或升级驱动后系统自动生成了新的随机MAC部分网卡驱动里有本地管理地址开关打开后每次连接都可能生成动态MAC。主板上原来走的有线网卡坏了换了个新网卡MAC自然就变了。电脑装了VMware、VirtualBox这类虚拟机软件或者系统里跑着虚拟化网络组件这些虚拟适配器会导致系统网卡顺序变化。如果你遇到昨天还能用今天装了个软件就报License request failed先怀疑这块别急着重装系统。4.2 用getmac等其他命令找到真正的授权网卡没有统一答案说FlexNet一定锁哪块网卡这也是麻烦所在。多数情况下它取第一块有效网卡的MAC但顺序在不同操作系统、不同网卡驱动下并不完全一样。有个比较常见的排查办法在客户端命令行执行getmac /v看本机所有网卡的MAC和连接名然后用排除法先禁用掉虚拟机软件创建的虚拟网卡只保留物理有线网卡再启动Creo看是否恢复。如果禁用虚拟网卡后Creo恢复正常就说明授权校验时取到了错误的网卡。这时候可以考虑调整网卡绑定顺序或者干脆卸载不必要的虚拟网络组件。部分硬件调试工具、远程管理工具安装时也会创建虚拟网卡同样可能引发这个问题逐个禁用排查就行。4.3 多网卡环境的规避方案企业里最稳妥的办法是用服务器端浮动授权让客户端只负责连接服务器不在本地做MAC校验这样客户端电脑再怎么折腾网卡都不影响。如果确实用的是单机版节点锁定授权那就要把改网卡当成一件敏感操作。尽量用主板自带的有线网卡别为了省事用USB网卡那个MAC真的一换就废。同时在做系统重装、磁盘还原之前先确认license.dat里的MAC信息和当前硬件一致不一致就先找软件供应商重新申请授权文件别等装完再对着报错干瞪眼。5. 三个真实场景复盘杀毒软件、系统时间、环境变量5.1 案例一杀毒软件隔离了ptc_d某次服务器上lmstat显示一切正常但客户端始终报-97。我登录服务器打开lmgrd日志发现里面全是ptc_d exited with status这类记录。再往细看杀毒软件把ptc_d当成了可疑进程隔离了lmgrd每次尝试拉起ptc_d都会在几秒后被安全软件拦截杀掉。处理方法是把FlexNet安装目录加入杀毒软件白名单然后从隔离区恢复文件重启许可证服务。从那之后我就不太建议把许可证服务器装在装了各种安全卫士软件的机器上也建议在杀毒软件策略里提前把以下进程和目录排除掉服务端FlexNet安装目录比如C:\Program Files\PTC\FlexNet服务端license.dat所在目录lmgrd.exe、ptc_d.exe、lmutil.exe这些可执行文件5.2 案例二服务器系统时间偏离导致校验失败还有一次客户端报的错很怪错误码不是那几个常见的而是类似clock difference too large的提示。查了半天最后发现服务器系统时间比标准时间慢了十几分钟。FlexNet在做授权校验时对时间差很敏感服务器和客户端之间时间差过大会导致握手失败。解决方法是把服务器和所有客户端都纳入统一的时间源同步Windows自带的时间同步就能满足要求。在服务器上执行w32tm /resync强制同步一次再设置计划任务定期校准。这个坑在虚拟机服务器上尤其常见宿主机休眠、快照回滚、资源竞争都会让虚拟机的系统时间悄悄跑偏。我见过因为虚拟机时间慢了整整一天所有授权全部失效的极端案例所以每次巡检我都会看一眼时间是否正常。5.3 案例三PTC_D_LICENSE_FILE指向旧文件Creo客户端的启动行为会受环境变量影响。PTC_D_LICENSE_FILE或者LM_LICENSE_FILE如果被设置成了一个失效的路径无论你在界面上把license设置改成什么程序启动时还是会优先读环境变量。某次用户反复配置license.dat路径重启Creo照样报-9最后打开系统环境变量一看PTC_D_LICENSE_FILE还指着一个旧的临时目录。删掉或改正这个变量问题当场解决。排查方式就是在CMD里输入echo %PTC_D_LICENSE_FILE% echo %LM_LICENSE_FILE%有值就好好审视一番。尤其是做过二次开发、装过其他PTC工具软件的机器环境变量容易被顺手写进来时间久了根本没人记得。如果这两个变量已经被废弃直接删掉是最干净的。如果确实需要指定别的license文件建议统一指向网络共享路径下的标准license.dat方便后续维护。6. 把排障经验固化成日常制度6.1 每月五分钟的服务器巡检清单做支持这行最累的不是处理问题而是被同一个问题反复磨。License request failed for feature这个报错只要日常维护做到位很多坑根本不会出现。我自己在服务器上建了一个简单的巡检清单许可证服务是否设为自动启动当前是否在运行。lmstat -a的输出里vendor daemon是否为UP状态。剩余授权数量是否长期接近满额接近满额说明许可不够用要提前规划释放闲置会话。服务器磁盘空间是否充足特别是license.dat和日志文件所在分区。杀毒软件隔离区里有没有PTC相关文件。服务器系统时间是否正常。不需要天天看每月一次五分钟能做完。但这五分钟能让你避开很多次全公司突然打不开Creo的紧急事故。建议把这条巡检写进值班记录而不是靠脑子记忆。6.2 license.dat备份与权限管理许可证文件换过、改过之后最好把每次验证可用的版本另存一份放到服务器和客户端都能访问的位置。这样一旦最新版本出问题可以快速回退。同时建议在服务器上给license.dat设置只读权限防止某些程序或人为操作把文件内容改坏。备份文件命名要带上日期和用途比如license_202505_ok.dat不要叫license_final_v2这种时间一久根本分不清。我的习惯是保留最近三个月的有效版本超过三个月的老备份清理掉避免目录混乱。6.3 客户端标准化配置让日志说话规范一定比经验可靠。给Creo客户端统一配置一个固定路径的license环境变量并且让Creo输出启动日志这样下次再报错时日志里会把请求的feature、时间、错误原因都写清楚排错效率会高很多。尤其在大规模部署时license文件路径、环境变量、hosts映射最好做成标准模板发给用户一套别让每个人自己去猜。我见过有些工程师为了省事把license.dat放到桌面系统一清理桌面文件就全没了第二天开机软件直接罢工。放到固定目录比如C:\ProgramData\PTC\licenses权限和备份都好管理。再配合环境变量的统一设置整个环境的可靠性会明显上台阶。最后说一条实操感受真的遇到这个报错千万别先卸载重装Creo或者重装系统。大部分情况是环境问题不是软件问题。按读错误码、查服务端、查客户端解析和端口、查网卡与环境变量这个顺序走一遍大多数问题都能定位。排障这事儿说到底就是有章法地排除变量而不是靠运气撞答案。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进