友情提示:文章底部附完整代码下载!测试环境为Windows10LTSC+Ansys2024R1。如果你要问为啥我没装最新版Ansys2026,呵,100G上传到超算平台到猴年马月了。理论上适用于所有需要许可程序的Ansys版本!
重点关注:如果你的Ansys许可程序路径和Ansys许可文件路径与我的代码不符,请自己修改,如果不想修改代码,那么安装Ansys许可程序时安装路径保持默认,也即C:\Program Files\ANSYS Inc,同时把license.txt许可文件放在C:\Program Files\ANSYS Inc\Shared Files\licensing文件夹下!!!
问题概述
超算大家可能用的多的是Linux系统的,因为好多CFD商软都有Linux版本,且Linux对服务商来说管理更方便,比如我们熟知的Ansys和StarCCM+都有官方发行的Linux版本,且相同配置下,这些软件在Linux求解速度要比Windows快一些,所以如果你是用CFX或者Fluent等流体求解器,用Linux的超算即可。
但是并不是所有软件都有Linux版,比如我们常用的CFturbo和Simerics MP+,当然还有其他很多很多软件,只有Windows版本。总不能我们在Linux中再虚拟个Win系统来跑这些软件吧,那属实是俄罗斯套娃行为了,因为每一次虚拟都会损失一部分性能。所以最好的方式还是直接用Windows版本的超算,我们将在下一篇文章为大家推荐我们使用过的还不错的超算服务商。今天主要的目的是来讲讲Windows超算中软件安装及激活的问题。
超算最大的优势是随用随开,按需计费,每创建一个虚拟机,都是一台新电脑,如果服务商没有内置安装程序,那么每次我们创建服务器后需要自己手动上传安装包,执行软件安装流程,才能使用。当然部分服务商也可以帮你预装软件,但是这可能涉及到平台版权问题,不见得那么顺利,尤其是一些小众软件,用的人很少,就别指望平台能内置了,所以还得自己来。
针对这个问题,部分超算服务商也提供了解决方案,你可以先开一台服务器,然后装好你需要的软件,完成这些工作后,把这台服务器创建成你自己的一个固定模板(云服厂家一般叫快照或镜像),后续新开超算服务器的时候,直接使用这个模板就可以了,那么恭喜你,解决了软件需要重复安装费时费力的问题。
你以为这就万事大吉了?还没有。先说简单的CFturbo和Simerics MP+,大家安装过肯定知道,这俩只需要替换部分文件就可以正常使用,不涉及许可文件及License中代码的变更,所以你用模板创建的服务器中打开就能直接使用。但是Ansys高版本不是这样,软件许可需要用到Ansys license management center,这就引入了一个新问题,我们安装时需要先在license.txt中将MAC Address代码替换成本机实际编码,然后再安装这个license许可才能正常激活使用Ansys,你猜每次新建的服务器的MAC Address代码变不变?这个编码是根据网卡等硬件计算的,本地电脑的MAC Address编码是唯一的,除非你更换硬件,但是每开一台超算,这个编码都是改变的,所以相当于每次开一台超算,都需要重新对Ansys进行授权,相比每次都需要安装Ansys来说,重新授权无非是改个license文件,打开Ansys license management center开启许可而已,也不算太麻烦。
解决方案
但是对于我这样的懒人来说,本着能少一步就少一步的原则,修改license文件这个工作我也不想自己做,那怎么办,那就电脑批处理呗,写个脚本,能够自动执行获取新MAC Address编码并修改license文件最后激活许可,部分代码如下:
bat文件:
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
)
del "%temp%\getadmin.vbs" 2>nul
powershell -ExecutionPolicy Bypass -NoExit -File "%~dp0ansys_update.ps1"ps1文件:
$LicenseFile = "C:\Program Files\ANSYS Inc\Shared Files\licensing\license.txt"
$LicensingDir = "C:\Program Files\ANSYS Inc\Shared Files\licensing"
$Winx64Dir = "$LicensingDir\winx64"
$LmgrdExe = "$Winx64Dir\lmgrd.exe"
$LogFile = "$LicensingDir\logs_backup\lmgrd.log"
$utf8NoBom = [System.Text.UTF8Encoding]::new($false)
Write-Host "===== Ansys License Update =====" -ForegroundColor Cyan
if (-not (Test-Path $LicenseFile)) {
Write-Host "[ERROR] Not found: $LicenseFile" -ForegroundColor Red
Read-Host "Press Enter to exit"
exit 1
}
Write-Host "[OK] Found license.txt" -ForegroundColor Green
$adapter = Get-NetAdapter | Where-Object { $_.Status -eq "Up" -and $_.MacAddress -ne "" } | Sort-Object ifIndex | Select-Object -First 1
if (-not $adapter) {
Write-Host "[ERROR] No network adapter found" -ForegroundColor Red
Read-Host "Press Enter to exit"
exit 1
}
$NewHostID = ($adapter.MacAddress -replace "-", "").ToLower()
Write-Host "[OK] New HostID: $NewHostID" -ForegroundColor Green
$lines = [System.IO.File]::ReadAllLines($LicenseFile)
for ($i = 0; $i -lt $lines.Count; $i++) {
$trimmed = $lines[$i].Trim()
if ($trimmed.StartsWith("SERVER ")) {
$parts = $trimmed -split "\s+"
Write-Host "[OLD] $trimmed" -ForegroundColor Yellow
$parts[2] = $NewHostID
$lines[$i] = [string]::Join(" ", $parts)
Write-Host "[NEW] $($lines[$i])" -ForegroundColor Green
break
}
}
Copy-Item $LicenseFile "$LicenseFile.bak" -Force
[System.IO.File]::WriteAllLines($LicenseFile, $lines, $utf8NoBom)
Write-Host "[OK] license.txt saved (UTF-8 no BOM)" -ForegroundColor Green
Write-Host ""
Write-Host "Stopping old License Server..." -ForegroundColor Cyan可以看到核心操作在ps1文件中,前面几行代码是确定Ansys的安装路径以及许可文件和许可管理器的路径,方便后续的修改、替换、重启等操作,后面就是自动获取MAC Address编码等问题了。将这两个文件放在同一个文件夹下,双击bat文件就可以自动创建许可文件并激活授权了。执行界面输出内容如下:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
===== Ansys License Update =====
[OK] Found license.txt
[OK] New HostID: 00163e555745
[OLD] SERVER localhost 00163e555745 1055
[NEW] SERVER localhost 00163e555745 1055
[OK] license.txt saved (UTF-8 no BOM)
Stopping old License Server...
[OK] Old processes cleared
Starting License Server (lmgrd)...
[OK] lmgrd launched, waiting 6 seconds...
[OK] lmgrd is running
[OK] ansyslmd vendor daemon is running
--- Last 15 lines of log ---
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) Number of VD restarts since LS startup: 0
8:14:17 (ansyslmd) (@ansyslmd-SLOG@)
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) === Network Info ===
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) Listening port: 50563
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) Daemon select timeout (in seconds): 1
8:14:17 (ansyslmd) (@ansyslmd-SLOG@)
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) === Host Info ===
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) Host used in license file: cloudam
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) HostID node-locked in license file: 00163e555745
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) HostID of the License Server: "00163e555745 14cf20524153 08c020524153 006d20524153"
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) Running on Hypervisor: Unknown Hypervisor
8:14:17 (ansyslmd) (@ansyslmd-SLOG@) ===============================================
8:14:17 (ansyslmd) Ecomms: Encrypted Communication disabled
8:14:17 (ansyslmd) TCP_NODELAY NOT enabled
8:14:17 (ansyslmd) Listener Thread: running
===== Done =====
New HostID : 00163e555745
Press Enter to exit:此时Ansys的许可就已经在运行中了。


所以理论上你把这两个文件放在超算中并做成模板,每次创建服务器后双击bat文件执行就可以自动许可授权了,相比之前的手动操作已经方便多了。
这就完了?依然不够,既然懒就一懒到底吧,能不能开机自动执行,我连点都懒得点,没问题,这个不需要写代码了,在Windows中自动运行批处理文件的方式有很多,可以修改注册表,也可以设置任务计划,我们选择最简单的任务计划。
如果不想手动设定计划任务,那么直接下滑看“代码完善部分”
设定任务计划(推荐)
这个功能是Windows自带的,在win中搜索“任务计划程序”,如下图所示,打开

点击“创建基本任务”

输入任务名称,点击下一步

触发器设定为“计算机启动时”或“当前用户登录时”,点击下一步

要执行的任务是“启动程序”,点击下一步

点击“浏览”找到脚本文件bat的路径,如下图所示,点击下一步

勾选下图所示的按钮,点击下一步

切换到触发器栏,点击新建,开始任务为登录时,所有用户,点击确定。这样触发条件就有了2个,满足任意一个就会自动执行许可激活服务。



完成以上步骤,再给这台超算创建一个模板就可以了,后续新建的所有超算开启后都是自动授权许可,不需要再手动操作了。
代码完善
看到这里想必你已经对这个东西有了一定的认识,那么作为懒人我要告诉你,上面添加自动任务这个事也是手动的,这能接受?继续改代码,因为这一步我也不想自己做哈哈。
那么只需要在ps1文件中添加如下代码即可:
$TaskName = "AnsysLicenseAutoStart"
$BatFile = Join-Path $PSScriptRoot "ansys_update.bat"
$existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
if (-not $existingTask) {
Write-Host ""
Write-Host "Registering startup scheduled task..." -ForegroundColor Cyan
$xmlLines = @(
'<?xml version="1.0" encoding="UTF-16"?>'
'<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">'
' <RegistrationInfo>'
' <Description>Auto-start Ansys License Server on boot and logon</Description>'
' </RegistrationInfo>'
' <Triggers>'
' <BootTrigger><Enabled>true</Enabled></BootTrigger>'
' <LogonTrigger><Enabled>true</Enabled></LogonTrigger>'
' </Triggers>'
' <Principals>'
' <Principal id="Author">'
' <UserId>S-1-5-18</UserId>'
' <RunLevel>HighestAvailable</RunLevel>'
' </Principal>'
' </Principals>'
' <Settings>'
' <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>'
' <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>'
' <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>'
' <ExecutionTimeLimit>PT5M</ExecutionTimeLimit>'
' <RestartOnFailure><Interval>PT1M</Interval><Count>2</Count></RestartOnFailure>'
' </Settings>'
' <Actions Context="Author">'
' <Exec>'
' <Command>cmd.exe</Command>'
(" <Arguments>/c `"" + $BatFile + "`"</Arguments>")
' </Exec>'
' </Actions>'
'</Task>'
)
$taskXml = $xmlLines -join "`r`n"
Register-ScheduledTask -TaskName $TaskName -Xml $taskXml -Force | Out-Null
Write-Host "[OK] Task '$TaskName' registered successfully." -ForegroundColor Green
Write-Host " - Trigger 1 : At system startup" -ForegroundColor White
Write-Host " - Trigger 2 : At any user logon" -ForegroundColor White
} else {
Write-Host ""
Write-Host "[INFO] Scheduled task '$TaskName' already exists, skipped." -ForegroundColor Yellow
}此时当你运行一次bat文件后,许可自动授权,也不需要手动添加任务计划,一键搞定。
代码下载
最终完整代码下方下载!
使用方法
下载安装包并解压,将2个文件放在同一个文件夹内,双击运行ansys_update.bat文件就行了,前提是你需要先安装教程安装完成Ansys的许可程序和主程序,再唠叨一下安装路径的问题,我的代码中Ansys许可程序安装在C:\Program Files\ANSYS Inc路径中,license.txt许可文件需要放在C:\Program Files\ANSYS Inc\Shared Files\licensing文件下,如果你想把许可程序装在别的其他盘里边,请手动修改ansys_update.ps1文件的前2行!!!Ansys主程序路径不受影响。。。
$LicenseFile = "C:\Program Files\ANSYS Inc\Shared Files\licensing\license.txt"
$LicensingDir = "C:\Program Files\ANSYS Inc\Shared Files\licensing"
$Winx64Dir = "$LicensingDir\winx64"
$LmgrdExe = "$Winx64Dir\lmgrd.exe"
$LogFile = "$LicensingDir\logs_backup\lmgrd.log"模板分享
如果你以上工作也不想自己做,当然也可以,我可以提供我做好的模板,开机即用,具体联系微信@pump7b3有偿获取。不用自己上传安装包,不用安装软件,也不用搞代码了。





nice谢谢