
简介针对Windows 10 20H2内部版本19042.630/660用户这份RDPWrap整合包用于解除远程桌面单会话限制实现多用户同时登录适合IT运维、远程协作以及需要在一台电脑上并行维护多台服务器的技术人员。压缩包共71个文件大小仅6.76MB文件类型以exe、ps1、bat、ini、txt为主exe提供安装、检测、配置三大核心模块ps1与bat负责一键安装、自动更新和卸载ini保存各系统版本的支持参数与更新配置txt则附带使用说明与更新信息。资源已有678人学习下载实用性经过同类场景验证。包内RDPWInst.exe、RDPCheck.exe、RDPConf.exe三款工具分别完成安装、检测与配置配合安装、卸载、自动更新等批处理脚本可快速完成远程桌面多用户设定后续若Windows版本更新只需单独提取并替换rdpwrap.ini即可同步支持新版本无需重新整体安装。整体目录结构清晰附有中文教程适合需要快捷启用远程桌面多会话的Windows用户按需取用。1. RDPWrap 是什么绕开远程桌面单会话限制的开源补丁干远程桌面运维的同行早晚会遇到同一个卡点同一台 Windows 机器你正连着远程桌面别人再发起连接就会把你先顶下来或者提示会话已被占用。这个限制写在系统的交互式会话策略里注册表翻半天也找不到一个总开关。RDPWrap 就是来解这个围的它在 termsrv.dll 的运行逻辑上做内存补丁把交互式会话数放开让多个用户能同时远程挂在同一台机器上。RDPWrap-master.zip 这个包名字里的 master 只是仓库主分支标识不是版本号里面是源码、配套工具和一份决定成败的 rdpwrap.ini。适合运维人员、测试环境搭建者以及需要在开发机上同时进多个桌面的场景。2. 为什么 Windows 只允许一个人远程termsrv.dll 与 RDPWrap 的挂钩原理要理解 RDPWrap先得搞清楚限制到底写在哪个环节。很多人以为是防火墙或端口问题其实端口和监听器都只是入口真正拒绝第二个交互式会话的是系统服务内部的会话分派逻辑。RDPWrap 不碰系统文件本体只在这段逻辑上做运行时改写这也是它安装和卸载都相对干净的原因。2.1 单会话限制的根源会话分派逻辑藏在 termsrv.dll 里Windows 的远程桌面服务由 TermService 服务承载核心模块是 C:\Windows\System32\termsrv.dll。这个 dll 负责 RDP-Tcp 监听器的创建、连接请求的接收以及新会话的创建和分派。你通过 3389 端口发起连接后Listener 只是把请求交给 termsrv.dll真正决定给不给你开一个新会话的是它内部的交互式会话数量判断。在 Windows 客户端版上系统只允许存在一个交互式会话。已经有用户登录桌面时新来的 RDP 请求会被判定为挤掉现有会话或直接拒绝这就是你被顶下线的直接原因。Windows Server 版本没有这个硬限制默认允许两个管理会话正式放开需要装远程桌面服务角色并配置授权这个差异在最后一章会展开说。RDPWrap 的工作方式很直接它把 RDPWrap.dll 加载进 TermService 所在的 svchost 进程在内存里对 termsrv.dll 中负责会话计数和判断的函数做跳转补丁把已经存在交互式会话这个条件改掉。这样一来termsrv.dll 处理第二个、第三个连接请求时就不会再拦截。这里有个关键点必须讲透termsrv.dll 每个构建版本的内部函数偏移量都不一样补丁该落到哪个地址完全依赖 rdpwrap.ini 这份配置。这份 ini 本质上是一张系统 build 版本号 → 函数偏移地址的查找表。表里没有你的系统版本补丁就打不准表现出来就是 RDPConf 界面一片红。这也是 RDPWrap 最大的玄学来源。Windows 更新经常更新 termsrv.dll旧 ini 对不上新版本于是社区里不断有人发布新 ini。你能不能用 RDPWrap不取决于你的 Windows 是大版本多少而取决于你手上的 ini 是否覆盖当前 termsrv.dll 的 build 号。2.2 为什么不建议用注册表硬改或第三方远程工具顶替有一个常见误解把注册表里 fDenyTSConnections 改成 0以为就能多用户并发。实际上这个键只是远程桌面的总开关控制的是允不允许远程桌面服务完全管不到会话数量。改完它只是打开了 RDP 功能第二个用户进来照样会被顶掉。还有人会用改默认端口的方式来解决问题。把 RDP-Tcp 的 PortNumber 改成 3390、3391 之类的端口可以避免被扫描到但这跟多会话是两码事端口换了限制还在。再看第三方远程工具。向日葵、AnyDesk、TeamViewer 这类软件走的是屏幕采集加视频流传输不是 RDP 协议。它们不占用 RDP 会话所以在多个人同时看一台机器的场景下确实能用。但问题也明显外设重定向弱剪贴板、打印机映射、本地磁盘映射这些 RDP 原生能力普遍缺失传输要走各自的中转服务器内网直连场景反而多绕一跳带宽占用通常也比 RDP 大得多。RDPWrap 的价值在于它保留了完整的 RDP 协议行为剪贴板、磁盘映射、音频重定向都正常同时不改系统文件本体。termsrv.dll 的哈希值不变补丁只在运行时生效卸载时把注册的服务删掉再重启 TermService 就还原了。代价是 dll 注入行为容易被杀软盯上以及每次系统更新后可能要跟进新配置。方案机制能否放开单会话主要代价fDenyTSConnections 改 0服务总开关不能只是打开 RDP没有副作用但解决不了问题第三方远程工具屏幕流 视频编码走独立通道不算放开 RDP外设重定向弱依赖中转链路RDPWraphook termsrv.dll能依赖 ini 匹配杀软可能误报2.3 解压包里的文件分工rdpwrap.ini 才是真正的核心拿到 RDPWrap-master.zip 后先别急着跑 installer.bat先把包里的文件认清楚。不同渠道打包的内容略有差异但通常离不开以下几类。文件职责什么时候用到RDPWrap.dll核心补丁模块以服务方式加载进 TermService 进程安装和每次启动时rdpwrap.initermsrv.dll 版本偏移表决定补丁能否生效每次系统更新后最需要关注installer.bat首次安装停服务、注册服务、启服务第一次部署update.bat覆盖更新替换文件后重启 TermService升级版本或更换 ini 后RDPConf.exe图形界面显示补丁状态、配置端口日常检查RDPCheck.exe本机自检工具模拟发起一个 RDP 会话验证补丁是否真的生效有一点要提醒master 分支的 zip 是源码包里面的 RDPWrap.dll、RDPConf.exe 可能是需要自己编译的源码而不是直接能跑的成品。如果你拿到的是这类包先看有没有 RDPWrap.sln 之类的工程文件用 Visual Studio 编一遍不想折腾编译的直接用官方仓库 Release 页里打包好的成品再把 master 里的 rdpwrap.ini 一并换过去用。rdpwrap.ini 这份文件不建议自己改里面是版本号和偏移地址的对应数据普通人看不懂也改不动。你需要做的只有一件事确保它的版本覆盖当前系统的 build 号。这也是后面所有排查工作的核心线索。提示安装前把整个解压目录挪到 C:\Program Files\RDP Wrapper 下不要放在临时目录或带中文的路径里。installer 脚本通常按固定路径注册服务路径不对后面更新和排查都会麻烦。3. 安装与配置从解压到 RDPConf 状态灯全亮RDPWrap 的安装流程不算复杂但顺序有讲究。跳步的下场通常是装完了 RDPConf 显示红叉然后开始怀疑是不是系统版本不被支持。按下面四步走能省掉大部分排查时间。3.1 动手前先确认三件事系统 Build 号、termsrv.dll 版本、服务状态安装前先确认当前系统的准确版本这一步很多人会跳过。RDPWrap 判断兼容性用的是 termsrv.dll 的文件版本而不是系统显示的Windows 11 23H2这种大版本号因为同一个大版本下 Build 号不同termsrv.dll 可能都不一样。# 查看系统版本和 Build 号 Get-ComputerInfo | Select-Object WindowsProductName, OsVersion, OsBuildNumber # 查看 termsrv.dll 的文件版本这是 RDPWrap 真正对标的版本 (Get-Item C:\Windows\System32\termsrv.dll).VersionInfo.FileVersion # 查看远程桌面服务当前状态 sc.exe query TermService第一段命令里的 WindowsProductName 告诉你系统是哪个版本OsBuildNumber 精确到 Build这两个值决定了你要找哪个版本的 rdpwrap.ini。第二段命令读取 termsrv.dll 的 FileVersion这个值应该和 ini 里声明的 build 范围对应。第三段命令看 TermService 当前是否在运行如果服务本身是停止的说明系统层面的远程桌面服务有问题先把这个问题解决再继续。检查完成后对照一下 rdpwrap.ini 里有没有当前 build 号。没有的话后面装完大概率红叉可以直接去第 4 章看怎么处理。3.2 安装固定目录、管理员权限、installer.bat第一件事是把解压出来的整个目录放到 C:\Program Files\RDP Wrapper。直接复制过去不要放在下载目录里运行原因前面说过installer 脚本按固定路径注册服务后面更新也是对着这个路径操作。# 先建目录再把关键文件复制过去 mkdir C:\Program Files\RDP Wrapper copy /b /y RDPWrap.dll C:\Program Files\RDP Wrapper\ copy /b /y rdpwrap.ini C:\Program Files\RDP Wrapper\ copy /b /y RDPConf.exe C:\Program Files\RDP Wrapper\ copy /b /y RDPCheck.exe C:\Program Files\RDP Wrapper\ # 以管理员身份运行安装脚本 cd /d C:\Program Files\RDP Wrapper installer.bat # 安装后确认服务状态 sc query TermService | findstr STATEinstaller.bat 内部做的事情基本是固定的找到并停止 TermService然后把 RDPWrap.dll 注册成一个由 svchost 托管的小服务再启动 TermService。这样 RDPWrap.dll 就和 termsrv.dll 处在同一个进程里补丁才能在内存中生效。所以安装完成后TermService 的状态必须是 RUNNING如果显示 STOPPED说明脚本某一步失败了最常见的原因是权限不足。安装时务必用管理员身份运行 cmd 或 PowerShell。非管理员运行 installer.bat 通常会静默失败TermService 没被重启RDPWrap.dll 也注册不进去表面看没报错实际什么都没装上。3.3 配置RDPConf 的状态字段与端口调整安装完成后运行 RDPConf.exe界面会显示几个关键字段。这个界面是判断 RDPWrap 是否正常工作的第一入口字段含义如下。字段期望值含义Listener stateListeningRDP-Tcp 监听器正在等待连接SupportedYes当前 termsrv.dll 版本在 rdpwrap.ini 中有对应记录Diagnostics正常RDPWrap.dll 已加载且服务状态正常如果 Supported 显示 No说明 ini 不匹配跳到第 4 章处理。如果 Listener state 显示 Not listening多半是 TermService 没起来或端口被占用。端口调整也在这时候做。默认 3389 容易被扫描很多人会改成别的端口。改端口可以直接改注册表也可以用 RDPConf 界面操作但注意不要两边各改一次以最后一次写入为准。# 把 RDP 端口改成 3390 reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp /v PortNumber /t REG_DWORD /d 3390 /f # 给防火墙加对应放行规则 netsh advfirewall firewall add rule nameRDP-3390 dirin actionallow protocolTCP localport3390reg add 后面的路径是 RDP-Tcp 监听器在注册表里的固定位置/v PortNumber 指定键名/t REG_DWORD 表示这是 DWORD 类型/d 3390 是你要改的端口号/f 表示强制覆盖已有值。改完端口后必须重启 TermService 或重启系统监听器才会真正使用新端口。重启后再连接地址要写成 IP:3390 的格式。3.4 验证RDPCheck 与 mstsc 是两种不同的验证级别装完别急着宣布成功先做一轮验证。验证至少分两个层次RDPCheck.exe 是本机自测mstsc 是真实登录测试两者能定位的问题层面不同。先给要远程登录的账户授权# 把用户 demo 加入远程桌面用户组 net localgroup Remote Desktop Users demo /addRDPCheck.exe 的运行逻辑是向本机 3389 端口发起一个 RDP 连接请求用来验证补丁是否让第二个会话被创建。它不需要真正进入桌面适合快速判断 termsrv 层面的补丁是否生效。如果 RDPCheck 失败问题基本锁定在补丁层看 ini 或服务状态。mstsc 实测是更接近真实场景的验证。在另一台机器上执行 mstsc或者在本机用 mstsc /v:127.0.0.1 手动连一次输入账号密码后看能不能正常进入桌面。如果 mstsc 能连上但黑屏问题更多在会话或显卡驱动层面跟补丁本身没关系。最终验收标准是两个不同账号同时登录第一个会话不被顶掉。这才是多用户并发真正要的效果光看到 RDPConf 绿灯还不够。4. 避坑记录RDPWrap 失效、杀软拦截与黑屏的五个现场RDPWrap 用起来不复杂坑都在细节里。这五类问题我基本都踩过每一条都按现象、原因、解决的顺序说清楚下次遇到直接对照。4.1 现象RDPConf 状态变红提示 UnsupportedRDPConf 界面里 Listener state 显示红叉或 Unsupported远程连接失败RDPCheck 一跑就报错。这是 RDPWrap 最经典的翻车现场。原因大概率是系统更新把 termsrv.dll 升级了新版本不在当前 rdpwrap.ini 的覆盖范围里。同一台机器上个月还正常这次 Windows 更新完就红了十有八九是这个。解决方法是先通过 RDPConf 里的支持信息查看当前 termsrv.dll 的 build 号然后去找比这个版本更新的 rdpwrap.ini 替换旧文件。替换顺序有讲究先停 TermService再覆盖文件再启动服务而不是直接覆盖正在运行的文件。另外注意别下载来路不明的整合版 ini有些只是改了版本号字符串里面对应的偏移地址还是旧的装完照样红。4.2 现象杀毒软件把 RDPWrap.dll 隔离或删除装完 RDPWrap 后一切正常过一会儿再连就连不上了。打开杀软隔离区一看RDPWrap.dll 被当作木马隔离了TermService 还在运行但补丁已经加载不进去。原因是 RDPWrap 的运行方式就是往系统服务进程里注入 dll 并修改系统函数的执行流这个行为在杀软的特征引擎里非常像远程控制木马。杀软不一定误报它只是按行为特征判断。解决方法是把 C:\Program Files\RDP Wrapper 整个目录加入杀软排除白名单装完后重新复制一次 RDPWrap.dll 并重启 TermService。如果你对安全性要求高可以从源码自己编译一份 dll编译产物通常比网上直接下的成品更不容易触发特征检测。安装包留着别删方便后续重装和比对。4.3 现象能弹登录框但进桌面后黑屏或闪断mstsc 连接后登录框能出来输完密码进到桌面就黑屏过几秒断开或者直接闪回登录界面。这个问题的根因不在 RDPWrap 补丁本身而在 RDP 会话的图形栈。RDP 会话里显卡驱动会退化成软件渲染某些机器上这个退化过程会导致黑屏。老版本 RDPWrap 和 NLA网络级别身份验证的配合也可能出问题。解决方向有两个先用组策略把远程桌面会话主机里的硬件图形适配器关掉强制 RDP 会话使用软件渲染然后临时关闭 NLA 做对比测试。如果关掉 NLA 后能正常进桌面说明问题在 NLA 相关逻辑可以保留关闭状态或换新版本 RDPWrap 再试。4.4 现象和 AnyDesk、向日葵等第三方远程工具冲突装了 AnyDesk 或向日葵之后RDP 连进去黑屏第三方工具也连不上两边互相顶。原因是第三方远程工具会安装自己的镜像驱动和虚拟显示适配器这些驱动和 termsrv 创建的 RDP 会话叠加时发生显示层面的冲突。解决方法是把第三方远程工具的随系统启动服务关掉需要用的时候手动启动不用的时候就别让它常驻。如果业务上确实需要多个远程通道同时存在更稳妥的方式是把不同工具分散到不同机器上不要挤在同一台里互相打架。4.5 现象Windows 更新后不生效但服务显示 Running系统更新完RDPWrap 看起来一切正常RDPConf 显示 Listening、Supported 也是 Yes但实际连接时第二个用户还是进不来。这种现象常见于 TermService 没有真正重启。Windows 更新可能让 termsrv.dll 换了新版本但旧进程还挂着补丁还打在旧逻辑上。也可能是 installer.bat 执行时 dll 文件被占用替换没成功。解决时要看实际进程而不是界面。用 sc query TermService 查看服务进程 PID和更新前对比一下。确定需要重启时先停止服务确认状态变为 STOPPED再替换文件最后启动服务。如果搞不定直接重启系统重启之后一定是干净状态能排除掉大部分文件被占用的干扰。5. 排查与自维护用日志和备份脚本给 RDPWrap 续命RDPWrap 装完不是一劳永逸Windows 更新随时可能把它打回原形。与其每次翻车后临时找解决方案不如把排查和备份做成固定流程。5.1 从事件日志定位失败阶段很多人的排查习惯是只看 RDPConf 界面界面只告诉你补丁层的结果。如果失败根源在会话接入层、认证层界面显示的一切正常但就是连不上这时候必须看 Windows 事件日志。日志通道在事件查看器里的路径是应用程序和服务日志 → Microsoft → Windows → TerminalServices。其中 LocalSessionManager 负责会话的创建和断开RemoteConnectionManager 负责监听器和连接接入两个都看能更快缩小范围。# 拉取远程桌面会话管理操作日志最近 20 条 Get-WinEvent -LogName Microsoft-Windows-TerminalServices-LocalSessionManager/Operational -MaxEvents 20 | Select-Object TimeCreated, Id, LevelDisplayName, Message | Format-List这条命令里的 LogName 指定了日志通道/Operational 是实际记录会话动作的通道。Id 是事件编号LevelDisplayName 表示级别Message 里通常会带上会话 ID 和失败原因。排查时先按时间过滤看失败发生的时刻是否和连接操作吻合。如果日志里根本没有失败条目那问题就不在 termsrv 层回头查防火墙规则、端口连通性、账号权限更有效。注意这里有多个日志通道别看错。LocalSessionManager 管会话生命周期RemoteConnectionManager 管连接接入两个通道的失败含义不同。5.2 备份 rdpwrap.ini给自己留一份后悔药rdpwrap.ini 这么一份小文件决定了整个工具能不能用。手动更新前先备份是基本操作但备份不能只是复制一份要带时间戳否则多个版本混在一起根本分不清。echo off set SRCC:\Program Files\RDP Wrapper\rdpwrap.ini set DSTC:\Program Files\RDP Wrapper\backup if not exist %DST% mkdir %DST% for /f delims %%i in (powershell -Command Get-Date -Format yyyyMMddHHmm) do set TS%%i copy /b /y %SRC% %DST%\rdpwrap.ini.%TS% echo backup done: %DST%\rdpwrap.ini.%TS%这段批处理用 PowerShell 命令生成时间戳格式是年月日时分比如 rd wrap.ini.202501201530。用 PowerShell 取时间而不是 %date% 变量是因为 %date% 的格式受系统区域设置影响在不同语言环境下会得到不同的排序结果PowerShell 输出的 yyyyMMddHHmm 格式则固定且便于按文件名排序。恢复时把对应文件复制回原路径再停启一次 TermService 就行。建议养成的习惯是Windows 更新前跑一次备份更新后如果状态变红拿旧 ini 回来对比差异比到网上下载新配置更可控。5.3 写一个自动更新脚本从本地镜像拉新配置内网环境或服务器环境经常连不了外网每次手动找新 ini 很麻烦。我一般会把新版本的 rdpwrap.ini 放到内网的一台镜像机上然后在目标机器上跑一个更新脚本一次完成替换和重启。$src D:\rdpwrap-mirror\rdpwrap.ini $dst C:\Program Files\RDP Wrapper\rdpwrap.ini if (-not (Test-Path $src)) { Write-Host 镜像配置不存在中断; exit 1 } Stop-Service TermService -Force Start-Sleep -Seconds 2 Copy-Item -Path $src -Destination $dst -Force Start-Service TermService sc.exe query TermService | Select-String STATE脚本逻辑不复杂先检查镜像文件是否存在不存在直接退出避免把空文件复制过去然后用 Stop-Service -Force 强行停止 TermServiceSleep 2 秒是为了让旧进程完全退出释放文件占用Copy-Item -Force 覆盖目标文件最后启动服务并输出 STATE 行确认状态。执行这个脚本时要注意一个很实际的坑它会断开当前机器上所有 RDP 会话。如果你正远程连在这台机器上操作脚本执行到 Stop-Service 的一瞬间你自己的连接也会断所以务必在本地控制台或带外管理界面执行。Windows 更新后发现 RDP 状态不对先跑这个脚本再验证大概率能省掉手动操作的时间。6. 多用户并发的差异适配Server 授权、组策略与固定会话6.1 Windows Server 与 Win10/11 的授权路径不同RDPWrap 不是所有场景都需要。Windows Server 装了远程桌面服务角色后本身就支持多会话但它要求有授权服务器没配授权时默认只有 120 天宽限期。如果你的 Server 环境已经有 License Server正确做法是去配置远程桌面会话主机和授权模式而不是再套一层补丁。RDPWrap 真正的主场是 Win10/11 专业版、工作站版以及没配 RDS 的 Server 测试环境。这里有个容易忽略的点组策略里的限制连接数量会压在 RDPWrap 之前即使补丁生效策略写 1 就只能进 1 个会话。检查路径在计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 连接 → 限制连接数量务必确认这个策略没有被显式设置。场景是否需要 RDPWrap注意事项Windows Server RDS 角色 授权不需要配置会话集合和授权模式Windows Server 未装 RDS可选默认只有两个管理会话可放开Win10/11 专业版/企业版需要每次系统更新都可能翻一次车6.2 把重启验证养成唯一验收标准最后分享一个我自己的教训。有次在 Win11 某版本上装好 RDPWrapRDPConf 三盏灯全绿我看状态正常就没重启 TermService第二天同事连的时候报只有一个用户会话可用。查了很久才发现补丁层的逻辑还停在旧进程里界面显示的绿只是配置层匹配实际加载的进程根本没换。从那以后我每次改完 RDPWrap 配置都强制走一遍完整验证先跑 RDPCheck 本机自测再用另一台机器 mstsc 实测之后用 sc.exe query TermService 确认进程 PID 已经变化最后看一轮 TerminalServices 事件日志确认没有新的失败记录。顺序也有讲究先快速定位再真实登录最后看日志兜底这套流程五分钟内能走完能挡掉九成以上的假装成功。希望帮到你。本文还有配套的精品资源点击获取