先说结论:不会自动释放。
用户把操作系统重装了,但许可证服务器那边还记着“这个用户已经占了一个席位”。那个许可证会一直挂在服务器上,直到管理员手动清理,或者等到超时时间到了自动回收。
FlexNet的通信机制和HTTP协议不一样——它不是一问一答的同步模式。客户端发起许可证签出请求,服务器给一个响应,然后就各干各的了。
关键问题在这里:当客户端正常关闭软件时,它会主动向服务器发送一个“释放”数据包,告诉服务器“我用完了,你把许可收回去吧”。
但如果用户重装系统,情况完全不一样。重装系统不是“正常关闭软件”——操作系统被格式化重写了,那个负责发送释放请求的进程早就没了。服务器根本收不到任何释放通知。
从服务器的视角看,这个许可证仍然被占用着,它不知道客户端已经彻底没了。这就是为什么重装系统后,那个许可证会变成“僵尸会话”,一直挂在服务器上。
一个实际案例: 有用户反馈,笔记本电脑上的许可证签出后无法归还,重装FlexNet也没用。另一位用户确认,“重装不会清除它”——因为问题不在本地,在服务器端。归根结底一句话:释放许可证需要客户端主动通知服务器,重装系统这个过程不会触发任何通知。
如果服务器配置了TIMEOUT或TIMEOUTALL参数,闲置的许可证会被自动回收。
但默认的超时时间并不短。FlexNet的TIMEOUT默认最小释放时间是900秒,也就是15分钟。在某些厂商的实现中,闲置许可证的默认保留时间甚至长达2小时。
也就是说,即使用了超时回收,重装系统后那个许可证也要等至少15分钟才能回到池子里。如果服务器根本没配置超时回收,那它可能会一直挂着,直到管理员手动处理。
需要在options文件中配置才会生效,不是默认就有的。如果没配过,那就只能靠手动释放了。

关键不在于“重装后怎么释放”,而在于“重装前先把许可证还回去”。
很多软件厂商的官方文档里明确写了这一点。Tekla的许可证管理指南中有一条注意事项:“如果要重装系统,必须先退还许可证”。退还之后,许可证就从服务器上释放了,重装完再重新激活就行。
具体操作因软件而异,但大体思路是一样的:
如果软件没有独立的退还工具,可以手动在服务器上用lmremove命令释放,或者联系管理员处理。
还有一个常见的补救措施: 如果重装后发现许可证被锁定,可以删除本地C:\ProgramData\FLEXnet文件夹下的相关文件,然后重新激活。但这个方法解决的是本地激活问题,服务器上被占用的那个许可证仍然需要手动释放。
方法一:管理员手动释放
在服务器上用lmstat查看当前占用情况:
bash
lmutil lmstat -a -c /path/to/license.lic找到那个重装系统的用户占用的会话,记录下feature名称、用户名、主机名和handle值。
然后用lmremove强制释放:
bash
lmutil lmremove -h feature_name 主机名 端口 handle值注意:某些版本的lmadmin默认禁用了lmremove功能,需要加-allowLicenseReclaim参数启动才能用。

方法二:重启许可证服务器
如果僵尸会话比较多,逐个释放太麻烦,可以直接重启lmgrd服务。但重启会导致所有在线用户短暂断连,需要提前通知。
方法三:等待超时回收
如果服务器配置了TIMEOUT,等超时时间到了会自动回收。但默认15分钟起步,如果不确定有没有配,不如直接手动释放来得快。
| 问题 | 答案 |
|---|---|
| 重装系统后许可证会自动释放吗? | 不会 |
| 为什么不会? | 客户端没有发送释放请求 |
| 默认多久自动回收? | 15分钟起步(需配置TIMEOUT) |
| 正确做法是什么? | 重装前先退还许可证 |
| 已经重装了怎么办? | 管理员用lmremove手动释放 |
一句话记住:重装之前先还许可,别等重装完了再去救火。