问题描述


       如果之前可以正常连接远程桌面但是突然报出 “由于没有远程桌面授权服务器可以提供许可证”的提示,根本原因在于,server 2012 或server 2008等默认的最大远程登录链接为2个,超过这个数目需要使用license server进行授权,这个授权据说是收费的,但官方给予了120天的Grace period来配置license server。如果超过120天后仍然没有可用的license server,就会出现第一种错误。而这个Grace period信息记录在上文的注册表中,因此只要删除注册表中的项(需要修改此注册表项权限所有者为Administrators,给Administrators增加修改权限),重启服务器就可以了。还有人提到可以修改系统时间为将来,然后删除注册表,再把系统时间改回来,这样可以获得更长的Grace period。

微软官方的解释:

原因:

因为 Windows 应用商店的应用程序不具有足够的权限来访问的MSLicensing注册表项或子项存储区,则会出现此问题。因此,当应用程序连接到远程服务器时,远程桌面 ActiveX 接口在进程内 COM 对象无法访问注册表,并停止连接过程。

解决方案:

警告: 如果使用注册表编辑器或其他方法错误地修改了注册表,可能会出现的严重问题。这些问题可能要求您重新安装操作系统。Microsoft 不能保证这些问题能够得到解决。修改注册表的风险由您自己承担。

最终的解决办法:
首先使用“mstsc /admin /v:目标ip”来强制登录服务器,但只能是管理员身份。

mstsc /admin /v:目标ip

管理员权限打开注册表: 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod

删除REG_BINARY保留默认 default.重启即可。

需要修改此注册表项权限所有者为Administrators,给Administrators增加修改权限.否则出现无法删除的现象。
原因:server 2012 或server 2008等默认的最大远程登录链接为2个,超过这个数目需要使用license server进行授权,这个授权据说是收费的,但官方给予了120天的Grace period来配置license server。如果超过120天后仍然没有可用的license server,就会出现第一种错误。而这个Grace period信息记录在上文的注册表中,因此只要删除注册表中的项。

批处理脚本一键删除注册表:(将以下代码写入文本文档,重命名该文档为delete.bat,然后右键--以管理员身份运行即可)

@echo off
setlocal enabledelayedexpansion
set key="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod"
reg query !key!
set /a cnt=0
for /f "tokens=1* delims= " %%a in ('reg query !key!') do (
  echo ------------------!cnt!---------------
  if "!cnt!" == "0" (
    echo skip
  ) else (
    echo %%a
    echo %%b
    rem echo %%c
    echo reg delete !key! /v %%a
    reg delete !key! /v %%a
  )
  set /a cnt=cnt+1
)
pause

特别说明:如果注册表策略限制,也可能出现不给删除注册表的。则可以运行 gpedit.msc,用户配置--管理模板--系统--阻止访问注册表,打开,选择已禁用,应用。要检查这里一下是否禁运行注册表。