1. 问题现象与背景解析
最近在配置FlexNet Publisher(FNP)许可服务器时,遇到了一个典型问题:通过LMTOOLS工具添加新服务后,无论是启动还是停止服务都报错。启动时报"VD is starting, please check vendor daemon's status in debug log",停止时则提示"Unable to Stop Server. Check the License search path and VD status",服务状态显示错误代码"FlexNet Licensing error:-15,10. System Error: 10061 'WinSock: Connection refused'"。
这个问题其实很常见——当FlexNet服务被错误地配置为"Local Service"账户而非"Local System"账户时就会出现。Local Service账户的权限受限,无法正常完成网络通信所需的端口绑定和进程间通信,导致服务无法启动或停止。
提示:错误代码10061(WinSock: Connection refused)通常表明服务进程虽然存在,但无法建立有效的网络连接,这是权限不足的典型表现。
2. 问题根因深度分析
2.1 账户权限差异对比
Local Service和Local System账户的关键区别在于:
- Local Service:最小权限账户,无法访问网络资源(如注册表远程访问、网络端口监听)
- Local System:最高权限本地账户,可执行所有系统操作
FlexNet Publisher的vendor daemon(供应商守护进程)需要:
- 绑定TCP端口(默认27000)
- 读写系统注册表
- 与其他服务进程通信
这些操作都需要Local System级别的权限。当服务被误设为Local Service时,守护进程无法完成上述操作,导致连接拒绝错误。
2.2 错误链条还原
完整的错误发生逻辑如下:
- 服务启动时尝试绑定网络端口 → 权限不足失败
- 守护进程转入"半启动"状态 → 显示"VD is starting"
- LMTOOLS尝试连接控制端口 → 触发WinSock 10061错误
- 服务状态检测超时 → 返回错误代码-15,10
3. 详细解决方案
3.1 服务账户修正步骤
打开服务管理器:
- Windows 10/11:右键开始菜单 → 计算机管理 → 服务和应用程序 → 服务
- 旧版Windows:控制面板 → 管理工具 → 服务
定位FlexNet服务:
- 服务名称通常包含"FlexNet"或您的供应商名称(如"ARM_License_Server")
- 可参考LMTOOLS中"Config Services"标签页显示的服务名
修改登录账户:
- 右键服务 → 属性 → 切换到"登录"选项卡
- 选择"本地系统账户"(不要勾选"允许服务与桌面交互")
- 点击"应用"保存设置
重启服务:
- 切换到"常规"选项卡 → 点击"启动"
- 等待约10秒让服务完全初始化
3.2 验证服务状态
通过以下方式确认修复成功:
LMTOOLS检查:
- 打开LMTOOLS → Server Status → Perform Status Enquiry
- 应看到vendor daemon的启动日志和可用license列表
端口检测:
netstat -ano | findstr 27000应显示TCP 27000端口处于LISTENING状态
日志确认:
- 查看FlexNet调试日志(默认位于license文件所在目录的debug.log)
- 搜索"SERVER STARTED"确认成功启动
4. 高级排查与深度优化
4.1 如果问题仍然存在
按照以下步骤进一步排查:
检查防火墙设置:
- 确保27000-27009端口在入站规则中开放
- 临时关闭防火墙测试是否为拦截导致
验证license文件路径:
- 在LMTOOLS中检查"Config Services" → Path to the license file
- 路径中避免使用中文或特殊字符
检查服务依赖项:
- 在服务属性 → 依赖关系中确认RPC服务正在运行
4.2 服务配置最佳实践
安装时注意事项:
- 使用管理员身份运行LMTOOLS
- 首次配置时直接指定Local System账户
权限细化方案:
# 如果需要自定义服务账户,需授予以下权限: icacls "C:\FlexNet\logs\" /grant "NT AUTHORITY\Local Service":(OI)(CI)F netsh http add urlacl url=http://+:27000/ user="NT AUTHORITY\Local Service"日志收集技巧:
- 在LMTOOLS中启用详细日志:
Set Debug Log = C:\flex_logs\debug.log Debug Level = 3
- 在LMTOOLS中启用详细日志:
5. 典型问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 错误-15,10 | 服务账户权限不足 | 改为Local System账户 |
| 端口27000被占用 | 已有FlexNet实例运行 | 停止冲突服务或修改端口 |
| 服务启动后自动停止 | License文件损坏 | 重新生成license文件 |
| 客户端无法连接 | 防火墙拦截 | 添加端口例外规则 |
6. 维护建议与经验分享
定期维护建议:
- 每月检查一次服务日志(debug.log)
- 每季度备份一次license文件和配置
性能优化技巧:
# 在license文件中添加: FLEXLM_TIMEOUT 300000 MAX_DAEMONS 10灾难恢复方案:
- 保存完整的LMTOOLS配置截图
- 记录服务恢复步骤文档
我在实际维护多个FlexNet服务器时发现,90%的启动问题都源于账户权限配置不当。特别是在Windows系统升级后,有时会重置服务账户设置。建议在每次系统大版本更新后,例行检查服务账户配置。
另一个容易忽略的点是:如果license文件路径包含空格(如"Program Files"),需要在LMTOOLS中用引号包裹完整路径。例如:
"C:\Program Files\FlexNet\license.dat"对于需要高可用的生产环境,可以考虑配置Windows服务故障自动恢复:
- 服务属性 → 恢复选项卡
- 第一次失败:重启服务
- 第二次失败:运行指定脚本通知管理员