SuperMap Web许可中心Windows开机自启配置完全指南
2026/9/13 2:30:29 网站建设 项目流程

1. 为什么服务器重启后SuperMap Web许可中心经常“掉线”

很多GIS运维同学应该都经历过这个场景:周五下班前顺手给服务器打了补丁重启,周一早上一来,业务系统报警,iServer 服务起不来,一看日志,提示“获取许可失败”“License not found”。第一反应是许可过期了,登录 Web 许可中心一看,许可明明还在有效期内,但服务状态是“未运行”,手动点一下启动,业务立刻恢复。

这个问题的根源,就在于 SuperMap Web许可中心这个服务没有在 Windows 开机时自动拉起来。SuperMap 的许可体系里,Web 许可中心本质上是一个独立运行的 Web 服务,它负责给本机以及局域网内的其他 GIS 产品(比如 iDesktop、iServer、iObjects)提供许可授权。只要这台服务器重启过,而这个服务没有自动启动,下游所有依赖许可的 GIS 程序就全部“断供”。

说白了,许可中心相当于整个 GIS 体系的“供电局”,电网没恢复,你家灯再新也亮不了。所以解决“开机自启”这件事,不是锦上添花,而是生产环境稳定运行的底线。

我见过不少项目,部署文档里只写了“安装许可中心”,压根没提自启配置。等到验收的时候才发现,只要服务器一重启,整套 GIS 系统就瘫了。所以这篇文章我把 Windows 环境下 SuperMap Web许可中心设置开机自启的几种方案、详细步骤、以及我踩过的坑全部整理出来,供正在被这个问题折磨的同学参考。

2. 先搞清楚许可中心到底是以什么形式运行的

在动手配置之前,你得先判断自己机器上的许可中心是什么形态。不同形态的安装方式,自启配置的入口完全不一样。

2.1 服务模式与控制台模式的区别

SuperMap Web许可中心在 Windows 下有两种常见运行方式。一种是安装时注册成 Windows 服务,比如服务名称通常包含 “SuperMap” 和 “License” 关键字,这种情况下理论上可以通过 Windows 的“服务”管理单元设置自启动属性。另一种是以普通应用程序方式跑在用户会话里,安装目录下有一个启动 exe,需要手动双击或通过脚本拉起。

区分方法很简单,打开“服务”(Win+R 输入 services.msc),找一下有没有名字里带 SuperMap、License、WebLicense 这类字样的服务项。如果有,说明是服务模式;如果没有,那你大概率在“任务管理器 - 详细信息”里能看到一个独立进程,对应安装目录下的某个 exe。

服务模式按理说直接改启动类型就行,但实际项目里我遇到最多的情况是:服务是注册了,但它依赖的某些组件启动时机太早,或者服务账户权限不足,导致开机时启动失败。这就引出另一个现象——你手动去服务里点“启动”没问题,但开机自启就是失败。我后面会详细讲如何用任务计划程序绕开这个坑。

2.2 找到许可中心的安装目录和日志位置

不管你是哪种模式,先确认安装目录。常见路径是:

  • C:\Program Files (x86)\Common Files\SuperMap\SuperMap License Center
  • 或者D:\SuperMap\LicenseCenter(取决于你当时装的时候怎么选的盘符)

建议顺手看一眼安装目录下有没有logs文件夹,里面会有许可中心自己的运行日志,比如license-center.log。等我们配置完自启,如果发现没成功,第一件事就是翻这个日志,比瞎猜高效得多。

另外,还要确认一下许可中心默认监听的端口。SuperMap Web许可中心通常用的是1947端口,当然这只是约定俗成的默认值,具体以你安装环境里的配置文件为准。后面验证服务是否起来,直接访问http://localhost:1947,如果页面能打开,说明许可服务是活的。这个端口号在后续防火墙、代理配置中也会用到,建议提前记下来。

3. 方案选型:服务启动、任务计划程序、启动文件夹怎么选

明确了许可中心的运行形态之后,接下来就是选方案。Windows 下做开机自启,常见三条路:服务管理器、启动文件夹、任务计划程序。我给个结论:优先推荐任务计划程序,尤其是在你搞不清楚服务为什么自启失败的情况下,这是最稳的路线。

3.1 各方案对比速览

方案优点缺点适用场景
服务启动类型设为“自动”最原生,无额外脚本依赖关系复杂时容易启动失败,权限查错麻烦服务注册正常、依赖简单的新装环境
启动文件夹放快捷方式操作简单,人人会配必须有人登录系统才触发,服务器重启后没人登录就拉不起来个人开发机、临时测试环境
任务计划程序触发时机可控,可延迟启动、可指定账户、可写脚本增强健壮性配置项多,初次上手有点绕生产服务器、需要稳定自启的场景

生产环境我从来不用启动文件夹那一套,因为 Windows 服务器重启后经常处于“未登录”状态,启动文件夹只在用户登录桌面时才生效,这就等于自启压根没发生。任务计划程序可以在“不管用户是否登录都要运行”的条件下执行,适合无人值守的服务器。

3.2 为什么我更推荐“延迟启动 + 脚本拉起”的组合

任务计划程序里有个“延迟任务”的设置,我强烈建议打开。原因在于,服务器开机那会儿,很多底层服务(网络、数据库、域认证)还没就绪,许可中心如果抢跑,可能因为拿不到某些资源而启动失败,之后也不会自动重试,结果就是还是起不来。

我之前在一台配置较高的机器上踩过这个坑:开机自启配好了,结果还是偶发失败,后来在系统事件日志里发现许可中心的进程在开机后一两秒内就启动了,但此时网卡还没完全就绪,导致它监听端口失败。加上延迟启动之后,让系统先跑一会儿,再拉起许可中心,问题就消失了。

另外,用脚本拉起还有一个好处:你可以把启动动作写成幂等操作,先检测端口或进程,如果已经起来了就跳过,没起来再启动,避免重复拉起导致多个实例打架。

4. 实操配置:通过任务计划程序实现开机自启(完整流程)

下面进入正题,我把生产环境中实际用的一套配置流程完整写出来。这套流程我已经在多个项目的 Windows Server 2016/2019/2022 上验证过,稳定性很高。

4.1 第一步:准备启动脚本

虽然任务计划程序可以直接启动 exe,但我推荐先用 PowerShell 脚本包一层,这样能在启动前做环境检查、写日志,方便排查问题。打开记事本,贴入以下内容:

$logFile = "C:\SuperMap\LicenseAutoStart.log" $licenseExe = "C:\Program Files (x86)\Common Files\SuperMap\SuperMap License Center\bin\SuperMap.LicenseCenter.exe" $port = 1947 function Write-Log { param([string]$msg) $time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" Add-Content -Path $logFile -Value "$time $msg" } # 进程已存在则不重复启动 $proc = Get-Process | Where-Object { $_.Path -eq $licenseExe } if ($proc) { Write-Log "LicenseCenter already running, skip." exit 0 } # 端口已被占用则视为服务正常,也不重复启动 $conn = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue if ($conn) { Write-Log "Port $port already listening, skip." exit 0 } # 启动服务 try { Start-Process -FilePath $licenseExe -WorkingDirectory (Split-Path $licenseExe) Write-Log "LicenseCenter start command executed." } catch { Write-Log "Failed to start LicenseCenter: $_" exit 1 }

注意,$licenseExe的路径要替换成你那台机器上实际的 exe 路径。如果你不确定 exe 叫什么名字,去安装目录下找,常见的可执行文件长这样:SuperMap.LicenseCenter.exebin目录下类似名字的程序。如果是服务模式,脚本也可以改成用Start-Service来拉。

把脚本保存为AutoStartLicense.ps1,放到一个固定目录,比如C:\Scripts\。建议不要放桌面,也别放临时目录,免得哪天被清理掉。

4.2 第二步:在任务计划程序里创建任务

按 Win+R,输入taskschd.msc,打开任务计划程序。右侧操作栏点击“创建任务”,注意不是“创建基本任务”,基本任务向导功能太少。

在“常规”选项卡里:

  • 名称填SuperMap License Center AutoStart,方便以后识别。
  • 描述可填可不填,建议写上 “Auto start SuperMap web license center after system boot”。
  • 不管你当前登录账号是管理员还是普通用户,这里都勾选“不管用户是否登录都要运行”。
  • 勾选“使用最高权限运行”。
  • 在“配置”下拉框里选择Windows 10(在 Server 2016/2019/2022 上同样适用)。

这些设置非常关键。勾选“不管用户是否登录都要运行”是保证无人值守时任务能执行的前提;“最高权限”是因为许可中心写入日志、监听端口都需要一定权限。

4.3 第三步:设置触发器

切到“触发器”选项卡,点击“新建”,然后:

  • “开始任务”选择启动时
  • 勾选“延迟任务时间”并设置为30秒1分钟,我一般习惯 30 秒,足够系统完成网络和基础服务初始化了。
  • “启用”必须勾上。

延迟时间的设置,本质上是给系统开机过程留出缓冲。如果设置太短,比如 5 秒,可能系统都还没完全加载完;设置太长,比如 10 分钟,业务恢复又太慢,影响可用性。30 秒是我试过多次之后感觉比较均衡的值。

4.4 第四步:配置操作

切到“操作”选项卡,点“新建”,操作选“启动程序”,在“程序或脚本”里填powershell.exe,在“添加参数”里填:

-ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Scripts\AutoStartLicense.ps1"

这里有两个细节。-ExecutionPolicy Bypass是绕过 PowerShell 默认的执行策略限制,很多机器默认是 Restricted,直接双击脚本会被拦下来;-WindowStyle Hidden是让脚本运行时不要弹出黑窗口,毕竟这是服务器,弹个窗口出来既不专业也容易被误关。

4.5 第五步:设置条件和设置

“条件”选项卡里,把“只有在计算机使用交流电源时才启动此任务”取消勾选,服务器不存在省电问题,但默认它是勾上的,容易导致意外不触发。“设置”选项卡里,勾选“如果任务失败,按以下频率重新启动”,频率可以设成每1分钟,尝试次数3次,这样就算第一次启动失败,任务计划程序也会自动重试。

到这里,一个完整的自启任务就建好了。你可以先右键任务,点“运行”测试一遍,然后去任务管理器或者直接访问许可中心页面看看进程有没有起来。

5. 实操配置:服务模式下的自启检查和修复

如果你发现自己的许可中心是服务模式,那任务计划程序绕开服务依赖问题是一个可选方案,但更好的做法是先把服务自身的启动类型调对,再配合服务恢复选项来兜底。

5.1 设置服务启动类型

打开services.msc,找到 SuperMap 相关服务,比如名字里带 “SuperMap License Center” 或类似字样,右键选择“属性”,把“启动类型”改成“自动”。在“恢复”选项卡里,把第一次失败、第二次失败都设为“重新启动服务”,这样即使启动失败,Windows 也会自动再拉一次。

注意,服务模式的启动依赖通常包括网络服务(Network Profile)、Windows Event Log 等,这些一般都是先于应用服务启动的,所以正常来说“自动”就够了。如果你的服务还依赖数据库或共享存储,那才需要考虑延迟启动——服务属性里也有“自动(延迟启动)”选项,原理跟任务计划程序的延迟一个意思。

5.2 用命令验证服务的启动状态

配置完之后,可以用命令行快速验证一下服务当前的状态和启动方式:

sc qc "SuperMap License Center" sc query "SuperMap License Center"

sc qc能看到服务的启动类型配置,sc query能看到运行状态。如果启动类型不是AUTO_START,说明你之前没改成功。有些情况下,你可能装了多个 SuperMap 组件,服务名很容易搞混,建议用:

sc query | findstr /i "supermap"

把所有 SuperMap 相关服务列出来,再逐个确认哪个是许可中心。

5.3 服务模式启动失败的排查

如果你确认服务配置已经是“自动”,重启后依然没有起来,我建议去“事件查看器”里看两条线索:

  • Windows 日志 → 系统,找 Service Control Manager 相关的错误记录,里面会写失败原因,常见的是“服务登录失败”或“依赖服务不存在”。
  • 许可中心自己的日志目录,确认服务是否真的执行了启动逻辑但中途崩了。

服务登录失败,多半是“登录”选项卡里设置的账户密码过期或无权。改成LocalSystem账户通常能解决大部分问题,缺点是权限较大,但对于内网 GIS 服务器来说,这是实际项目里很常见的取舍。

6. 常见问题与排查技巧实录

实操过程中,可能你会遇到下面几个问题,我按出现频率从高到低整理了一下。

6.1 任务计划程序显示“上次运行结果 (0x1)”

这是一个通用错误码,表示脚本执行异常。先在命令行手动执行一遍脚本,看报错信息:

powershell -ExecutionPolicy Bypass -File "C:\Scripts\AutoStartLicense.ps1"

常见原因是脚本里的路径写错了,或者 exe 没有找到。还有一种情况是脚本本身的执行策略没问题,但 PowerShell 版本太老,某些 cmdlet(比如Get-NetTCPConnection)在老版本里不存在。如果是 Server 2008 R2,建议换用netstat -ano | findstr 1947来做端口探测。

6.2 任务运行了,但许可中心页面打不开

先用端口探测工具确认进程到底监听没有。命令行执行:

netstat -ano | findstr 1947

如果没有任何输出,说明进程起来了但监听失败。最可能的原因是端口被其他程序占用,换个端口或者停掉占用进程。也可能是因为许可中心启动时读取的配置文件里写了固定 IP,而服务器开机瞬间 IP 还没获取到,就会报错退出。这种情况在 DHCP 环境比较普遍,解决办法是把服务器 IP 改成静态。

6.3 开机能起来,但 iServer 启动时报无法获取许可

这个问题常见于 iServer 和许可中心不在同一台机器上的场景。iServer 启动时通过网络去请求许可中心,但 iServer 启动得比许可中心早,结果抢跑失败。

先去 iServer 的配置文件里确认许可中心地址配对了没,然后看 iServer 日志里的具体报错码。如果是网络超时,那就是启动顺序问题。最简单的解决方案是在 iServer 启动脚本里加一个“等待许可中心端口可访问”的逻辑。可以写一个循环检测:

$port = 1947 $deadline = (Get-Date).AddMinutes(3) while ((Get-Date) -lt $deadline) { if (Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue) { break } Start-Sleep -Seconds 5 } Start-Process -FilePath "C:\SuperMap\iServer\bin\startup.bat"

按我实际经验,这个方案比单纯调任务延迟时间更靠谱,因为它是根据实际端口状态来判断依赖是否就绪,而不是靠估算一个时间。

6.4 我整理的排查速查表

现象可能原因排查方向
服务未启动启动类型不是“自动”sc qc查看配置
服务启动失败账户权限不足或密码过期改用 LocalSystem
脚本任务返回 0x1脚本路径错误或命令不支持手动执行看报错
进程在但页面打不开端口被占用或配置错误netstat 看监听
下游产品获取许可失败启动顺序问题写端口等待逻辑

6.5 给新同学的几点额外建议

第一,不要在生产环境直接改配置,先在测试机上验证整个流程。第二,所有的脚本、路径、端口号都记录到项目部署文档里,别只放在自己脑子里。第三,许可中心所在服务器的时间要和域控或 NTP 同步,因为许可授权校验有时会检查系统时间和授权时间,时间偏移会导致授权异常,这玩意排查起来极其隐蔽。

7. 最后分享一点个人使用习惯

我在实际运维中比较推荐的组合是:如果是新部署,优先走“服务模式 + 启动类型自动 + 恢复选项重启服务”,这是最干净纯粹的方式,不需要额外脚本;如果服务模式总是因为各种依赖问题起不来,或者你根本没把握服务注册是否完整,那就直接用“任务计划程序 + PowerShell 探测脚本”,几乎可以覆盖所有突发情况。

还有一个细节容易忽略:Windows 计划任务在系统刚启动时,如果网络服务还没就绪,任务可能直接触发但脚本里的网络相关检查会失败。所以脚本里尽量用进程检测和端口检测双保险,不要只依赖端口检测,因为极端情况下进程刚起来但端口还没开始监听。上面给的脚本模板已经写了这两层判断,直接用就行。

另外,如果你同时装了 iDesktop 和 iServer,它们对许可的请求方式不完全一样,但许可中心只有一个。所以维护好这一台许可中心的可用性,就等于维护了整套 GIS 环境的可用性。开机自启这个配置,值得你花 10 分钟把它做扎实。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询