Устранение ошибок лицензирования NX
Этот раздел разбирает три связанные между собой проблемы: ошибку NX License Error: Cannot find license file [-1], настройку универсального сервера лицензий SolidSQUAD и конфликты портов при параллельной работе нескольких версий NX (например, NX 10 и NX 1899) на одной машине.
Что нужно знать заранее
Документация рассчитана на администраторов Windows, знакомых с управлением службами через services.msc, командной строкой и PowerShell, системными переменными среды и настройкой исключений в антивирусах (Windows Defender, Kaspersky Endpoint Security).
Если вы переходите с устаревшей версии вроде NX 10 на актуальный Continuous Release (NX 1899 и выше), среду лицензирования FlexNet придётся перестраивать с нуля.
О чём говорит ошибка [-1]
Сообщение NX License Error: Cannot find license file. Check that SPLM_LICENSE_SERVER is set correctly. [-1] означает, что клиентская часть NX запустилась, но не нашла системную переменную с адресом сервера или не смогла установить сетевое соединение с FlexNet по указанным портам.
За этим обычно стоит одна из четырёх причин:
- антивирус (Kaspersky или Defender) поместил в карантин или удалил ключевые бинарники сервера —
lmgrd.exe,ugslmd.exe,msys-2.0.dll; - устаревшие серверы (например,
Siemens PLM License Server) держат порты 28000/27800 и не дают подняться новому; - переменная
SPLM_LICENSE_SERVERотсутствует, содержит опечатки или конфликтует сUGS_LICENSE_SERVER; - был пропущен патч клиентской части — файл реестра
.regи подмена.dllв директории программы.
Дальше каждая причина разбирается отдельно, с готовыми скриптами.
Этап 1. Конфликты со старыми серверами (NX 10 vs NX 1899)
При параллельной установке старых и новых версий NX возникает конфликт архитектур серверов лицензий.
Старый сервер обычно ставился как служба Siemens PLM License Server, работал с файлом splm6.lic и резервировал порт 28000. Новый универсальный сервер от SolidSQUAD ставится как SSQ FLEXLM Service, покрывает лицензии для всех версий NX от 5.0 до актуальных и слушает одновременно порты 27800 и 28000.
Когда оба сервера пытаются стартовать при загрузке Windows, происходит блокировка семафора (Semaphore lock), и новый сервер падает.
Симптомы в логах FlexNet
В файле журнала сервера C:\SolidSQUAD_License_Servers\Logs\lmgrd.log это выглядит так:
21:13:03 (ugslmd) cannot create semaphore lock (Global\LM_ugslmd_SEMAPHORE): 5
21:13:03 (ugslmd) EXITING DUE TO SIGNAL 32 Exit reason 9
21:13:08 (lmgrd) ugslmd exited with status 32 (Exited because another server was running)
21:13:08 (lmgrd) MULTIPLE "ugslmd" license server systems running.Решение: отключить старый сервер и очистить память
Новый универсальный сервер полностью заменяет старый, поэтому от старого нужно избавиться. Через PowerShell или cmd:
# Выполните этот скрипт от имени Администратора, чтобы убить зависшие процессы FlexNet
Write-Host "Убиваем процессы-зомби старого сервера..." -ForegroundColor Yellow
try {
Stop-Process -Name "ugslmd" -Force -ErrorAction SilentlyContinue
Stop-Process -Name "lmgrd" -Force -ErrorAction SilentlyContinue
Write-Host "Процессы успешно завершены." -ForegroundColor Green
} catch {
Write-Host "Процессы не найдены или уже завершены." -ForegroundColor DarkGray
}
# Отключение старой службы
Set-Service -Name "Siemens PLM License Server" -StartupType Disabled -ErrorAction SilentlyContinue
Stop-Service -Name "Siemens PLM License Server" -Force -ErrorAction SilentlyContinue:: Выполните эти команды в cmd от имени Администратора
taskkill /F /IM ugslmd.exe /T
taskkill /F /IM lmgrd.exe /T
:: Отключение службы через sc
sc config "Siemens PLM License Server" start= disabled
sc stop "Siemens PLM License Server"После этого удалите папку старого сервера — обычно C:\Program Files\Siemens\PLMLicenseServer, — чтобы он случайно не запустился снова.
Этап 2. Антивирусные исключения
Самая частая причина отказов на этапе инициализации сервера. Корпоративные антивирусы, особенно Kaspersky Endpoint Security, крайне агрессивно реагируют на кряки.
Ломается это двумя способами. Во-первых, при распаковке SolidSQUAD_License_Servers.zip антивирус молча удаляет msys-2.0.dll или сами демоны lmgrd.exe и ugslmd.exe. Во-вторых, даже если файлы добавлены в локальные исключения, сетевой экран антивируса блокирует входящие соединения на портах 27800 и 28000. NX выдаёт ошибку [-1], хотя в логах сервера написано Started ugslmd.
Настройка Kaspersky KES
Просто добавить папку в «Исключения» недостаточно — нужно настроить доверенные программы (Trusted Applications).
Откройте настройки Kaspersky → Общие параметры → Угрозы и исключения (Threats and Exclusions), перейдите в раздел «Доверенные программы» и добавьте туда три пути:
C:\SolidSQUAD_License_Servers\Vendors\SiemensPLM\lmgrd.exeC:\SolidSQUAD_License_Servers\Vendors\SiemensPLM\ugslmd.exeC:\Program Files\Siemens\NX1899\NXBIN\ugraf.exe— сам процесс NX
Для каждого файла включите три флажка: «Не проверять открываемые файлы», «Не контролировать активность программы» и — это самое важное — «Не проверять сетевой трафик». Без последнего пункта вся настройка бесполезна.
Если антивирус уже успел удалить файлы, приостановите защиту, заново распакуйте папку Vendors из архива с кряком в C:\SolidSQUAD_License_Servers\, и только потом включайте антивирус.
Этап 3. Системные переменные среды
Чтобы NX знал, куда отправлять запрос на лицензию, ОС использует переменные среды. Разные версии используют разные имена: NX 1899 и новее читает SPLM_LICENSE_SERVER, NX 10 и старее — UGS_LICENSE_SERVER.
Чтобы обе программы работали с одного нового универсального сервера, нужно направить их на правильные порты: 27800 для новых, 28000 для старых.
Автоматизировать это можно следующим скриптом:
# Проверка прав администратора
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "ОШИБКА: Запустите PowerShell от имени Администратора!" -ForegroundColor Red
Exit
}
Clear-Host
Write-Host "=== Настройка системных переменных для NX 10 и NX 1899 ===" -ForegroundColor Cyan
# Универсальное значение для современных версий NX
$modernServerValue = "27800@localhost;28000@localhost;C:\ProgramData\Siemens\vistagy_SSQ.dat"
Write-Host "[1/2] Обновление SPLM_LICENSE_SERVER (Для новых версий)..." -ForegroundColor Yellow
[Environment]::SetEnvironmentVariable("SPLM_LICENSE_SERVER", $modernServerValue, "Machine")
Write-Host " [+] Успешно!" -ForegroundColor Green
# Значение для старых (Legacy) версий NX
Write-Host "`n[2/2] Обновление UGS_LICENSE_SERVER (Для NX 10 и старше)..." -ForegroundColor Yellow
[Environment]::SetEnvironmentVariable("UGS_LICENSE_SERVER", "28000@localhost", "Machine")
Write-Host " [+] Успешно!" -ForegroundColor Green
Write-Host "`n=======================================================" -ForegroundColor Cyan
Write-Host "ГОТОВО! Переменные обновлены." -ForegroundColor Green
Write-Host "ВНИМАНИЕ: Обязательно перезагрузите компьютер для применения изменений!" -ForegroundColor Red
Write-Host "=======================================================" -ForegroundColor CyanПосле выполнения нужна перезагрузка.
Этап 4. Патч клиентской части и интеграция в реестр
Даже если сервер лицензий настроен идеально и служба SSQ FLEXLM Service находится в состоянии Running, NX всё равно выдаст ошибку [-1], пока её внутренние механизмы защиты не пропатчены — программа будет искать криптографические ключи официальной лицензии Siemens, игнорируя локальный сервер.
Интеграция SolidSQUADLoaderEnabler
В директории с кряком лежит файл SolidSQUADLoaderEnabler.reg. Запустите его от имени администратора и согласитесь на внесение изменений. Файл модифицирует раздел реестра Session Manager так, чтобы Windows игнорировала определённые проверки подлинности библиотек (ExcludeFromKnownDlls). Без этого шага программа работать не будет.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"ExcludeFromKnownDlls"=hex(7):6e,00,65,00,74,00,61,00,70,00,69,00,33,00,32,00,\
2e,00,64,00,6c,00,6c,00,00,00,69,00,70,00,68,00,6c,00,70,00,61,00,70,00,69,\
00,2e,00,64,00,6c,00,6c,00,00,00,76,00,65,00,72,00,73,00,69,00,6f,00,6e,00,\
2e,00,64,00,6c,00,6c,00,00,00,00,00Замена файлов клиента
Модифицированные библиотеки (libugjs.dll и другие компоненты архитектуры NX) нужно скопировать вручную в корневую папку установленной программы.
Откройте папку загруженного кряка, найдите внутри директорию Client — там лежат подпапки, соответствующие компонентам Siemens (NX1899, NXBIN, UGII и т.д.). Скопируйте всё содержимое Client в корень установки NX, по умолчанию это C:\Program Files\Siemens\NX1899. На запрос Windows подтвердите слияние папок и замену файлов.
Состояние службы START_PENDING
При выполнении install_or_update.bat в консоли иногда мелькает строка Состояние: 2 START_PENDING. Это нормально для серверов FlexNet: батник запрашивает статус службы в ту же миллисекунду, когда даёт команду на запуск. Демону ugslmd.exe нужно от трёх до пяти секунд, чтобы прочитать объёмный файл лицензии (тысячи INCREMENT-инкрементов), открыть порты и перейти в состояние RUNNING.
Если же служба зависла в START_PENDING навсегда и не переходит в RUNNING даже через минуту, значит, отсутствует файл лицензии. Проверьте, что в C:\SolidSQUAD_License_Servers\Vendors\SiemensPLM\Licenses физически лежит файл .dat или .lic.
Диагностические скрипты
Сканер лицензий NX (только чтение)
Безопасно сканирует систему на наличие конфликтующих служб, неправильных переменных и путей. Ничего не меняет.
Clear-Host
Write-Host "=== SIEMENS NX LICENSE SCANNER ===" -ForegroundColor Cyan
Write-Host "Scanning system for NX licenses and servers...`n" -ForegroundColor DarkGray
# 1. Check Variables
Write-Host "1. ENVIRONMENT VARIABLES:" -ForegroundColor Yellow
$vars = @("SPLM_LICENSE_SERVER", "UGS_LICENSE_SERVER")
foreach ($v in $vars) {
$sys = [Environment]::GetEnvironmentVariable($v, "Machine")
$usr = [Environment]::GetEnvironmentVariable($v, "User")
if ($sys) { Write-Host " [System] $v = $sys" -ForegroundColor Green }
if ($usr) { Write-Host " [User] $v = $usr" -ForegroundColor Cyan }
if (!$sys -and !$usr) { Write-Host " [-] $v is NOT SET" -ForegroundColor DarkGray }
}
# 2. Check Services
Write-Host "`n2. LICENSE SERVICES (Running or Stopped):" -ForegroundColor Yellow
$services = Get-Service | Where-Object { $_.DisplayName -match "Siemens|SolidSQUAD|FLEXlm|PLM" -or $_.Name -match "SSQ|splm|ugs" }
if ($services) {
foreach ($s in $services) {
$color = if ($s.Status -eq 'Running') { "Green" } else { "Red" }
Write-Host " [$($s.Status)] $($s.DisplayName) (Name: $($s.Name))" -ForegroundColor $color
}
} else {
Write-Host " [-] No Siemens/SSQ license services found." -ForegroundColor DarkGray
}
# 3. Check Folders
Write-Host "`n3. COMMON LICENSE FOLDERS:" -ForegroundColor Yellow
$folders = @("C:\SolidSQUAD_License_Servers", "C:\Program Files\Siemens\PLMLicenseServer")
foreach ($f in $folders) {
if (Test-Path $f) { Write-Host " [+] Found folder: $f" -ForegroundColor Green }
else { Write-Host " [-] Not found: $f" -ForegroundColor DarkGray }
}
Write-Host "`n=== SCAN COMPLETE ===" -ForegroundColor CyanАвтоматический ремонтный скрипт (NX Error Fix)
Объединяет все шаги: прописывает системную переменную, находит и запускает SSQ FLEXLM Service, применяет файл реестра (если находит его в Загрузках) и добавляет базовые исключения для встроенного Защитника Windows.
Скрипт намеренно написан полностью на английском — это позволяет избежать ошибок парсера PowerShell TerminatorExpectedAtEndOfString, которые вылезают при сохранении русских символов в неверной кодировке (ANSI вместо UTF-8) через стандартный Блокнот.
# Admin check
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "ERROR: Please run PowerShell as Administrator!" -ForegroundColor Red
Exit
}
Clear-Host
Write-Host "=== NX License Fix ===" -ForegroundColor Cyan
# STEP 1
Write-Host "[1/4] Setting SPLM_LICENSE_SERVER variable..." -ForegroundColor Yellow
$varName = "SPLM_LICENSE_SERVER"
$varValue = "27800@localhost;28000@localhost;C:\ProgramData\Siemens\vistagy_SSQ.dat"
try {
[Environment]::SetEnvironmentVariable($varName, $varValue, "Machine")
Write-Host " [+] Variable set successfully!" -ForegroundColor Green
} catch {
Write-Host " [-] Error setting variable." -ForegroundColor Red
}
# STEP 2
Write-Host "`n[2/4] Checking license server service..." -ForegroundColor Yellow
$service = Get-Service | Where-Object { $_.DisplayName -match "SSQ" -or $_.Name -match "SSQ" -or $_.DisplayName -match "SolidSQUAD" }
if ($service) {
Write-Host " [+] Service found: $($service.Name)" -ForegroundColor Green
if ($service.Status -ne 'Running') {
Write-Host " [!] Service stopped. Starting..." -ForegroundColor DarkYellow
try { Start-Service -Name $service.Name -ErrorAction Stop; Write-Host " [+] Service started!" -ForegroundColor Green } catch { Write-Host " [-] Error starting service." -ForegroundColor Red }
} else { Write-Host " [+] Service is already running." -ForegroundColor Green }
} else {
Write-Host " [-] WARNING: SSQ Service NOT FOUND! Please reinstall the server." -ForegroundColor Red
}
# STEP 3
Write-Host "`n[3/4] Looking for registry file..." -ForegroundColor Yellow
$regFile = Get-ChildItem -Path "$env:USERPROFILE\Desktop", "$env:USERPROFILE\Downloads" -Recurse -Filter "SolidSQUADLoaderEnabler.reg" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($regFile) {
Write-Host " [+] Found: $($regFile.FullName). Importing..." -ForegroundColor Green
Start-Process -FilePath "reg.exe" -ArgumentList "import `"$($regFile.FullName)`"" -Wait -NoNewWindow
} else { Write-Host " [-] Registry file not found. Skipping." -ForegroundColor DarkGray }
# STEP 4
Write-Host "`n[4/4] Setting up Windows Defender exclusions..." -ForegroundColor Yellow
$pathsToExclude = @("C:\SolidSQUAD_License_Servers", "C:\Program Files\Siemens")
foreach ($path in $pathsToExclude) {
if (Test-Path $path) {
try { Add-MpPreference -ExclusionPath $path -ErrorAction Stop; Write-Host " [+] Excluded $path" -ForegroundColor Green } catch { Write-Host " [-] Failed to exclude $path" -ForegroundColor DarkGray }
}
}
Write-Host "`n=======================================================" -ForegroundColor Cyan
Write-Host "DONE! PLEASE RESTART YOUR COMPUTER NOW!" -ForegroundColor Red
Write-Host "=======================================================" -ForegroundColor CyanЗапуск неподписанного скрипта
По умолчанию PowerShell блокирует скачанные скрипты политикой Restricted. Чтобы временно её обойти, откройте PowerShell от имени администратора, выполните Set-ExecutionPolicy Bypass -Scope Process -Force и запустите скрипт командой .\NX_Error_Fix.ps1.