如何确保Windows Server 2019断开RDP后指定用户会话的交互式应用持续运行
如何确保Windows Server 2019断开RDP后指定用户会话的交互式应用持续运行
这种需要依赖交互式会话的应用,确实容易碰到断开RDP后自动关闭的问题,结合你提到的「不能转服务、已有崩溃重启任务」这些情况,我整理了几个针对性的解决办法,你可以试试:
1. 调整RDP会话的超时与断开规则
这是最核心的一步,很多时候断开后应用关闭,根源是系统自动结束了处于断开状态的会话。你可以通过本地组策略或远程桌面服务管理器来配置:
- 打开本地组策略编辑器:按下Win+R输入
gpedit.msc回车,依次导航到「计算机配置」→「管理模板」→「Windows组件」→「远程桌面服务」→「远程桌面会话主机」→「会话时间限制」- 找到「设置断开的会话的时间限制」,设置为「已启用」,然后把「结束断开的会话」选项改成「从不」
- 同时检查「活动但空闲的远程桌面服务会话的时间限制」,如果不需要空闲自动断开,也设为「从不」
- 确认「限制已断开连接的会话」没有被设置为强制注销
- 如果是通过服务器管理器管理远程桌面服务,还可以进入「会话集合」→右键默认集合→「属性」→「会话」标签,把「断开的会话」的超时设为「从不」,取消勾选「结束已断开连接的会话」
2. 模拟用户活动,避免会话被标记为「空闲」
有些系统或组策略会把长时间无操作的会话强制处理,哪怕你设置了超时为「从不」。可以写个简单的PowerShell脚本模拟轻微的用户活动,用任务计划程序定时运行:
# 模拟鼠标微小移动,防止会话被判定为空闲 Add-Type @" using System; using System.Runtime.InteropServices; public class MouseMove { [DllImport("user32.dll")] public static extern bool SetCursorPos(int X, int Y); } "@ # 获取当前鼠标位置,移动一点后再移回原位置 $currentPos = [System.Windows.Forms.Cursor]::Position [MouseMove]::SetCursorPos($currentPos.X + 1, $currentPos.Y) Start-Sleep 1 [MouseMove]::SetCursorPos($currentPos.X, $currentPos.Y)
设置任务计划时注意:
- 触发器选「用户登录时」启动,并且设置重复间隔(比如每10分钟运行一次)
- 操作选启动这个PowerShell脚本,参数填
-ExecutionPolicy Bypass -File "你的脚本路径.ps1" - 勾选「只有在用户登录时运行」,并且选择「使用最高权限运行」
3. 检查域组策略是否覆盖本地设置
如果你的服务器加入了域,本地组策略的设置可能会被域组策略覆盖。可以按下Win+R输入gpresult /r回车,查看当前应用的组策略,重点关注「计算机设置」里的远程桌面会话相关规则。如果发现有强制断开会话的域策略,需要联系域管理员调整。
4. 优化现有崩溃监控任务的触发条件
既然你已经有监控应用崩溃的任务,不妨再添加一个触发器:当用户会话连接(或断开)时,检查应用是否在运行,如果没有就自动启动它。这样哪怕偶尔出现会话异常导致应用关闭,也能快速恢复运行。
最后提醒一下:断开RDP时尽量用界面上的「断开」按钮,不要直接关闭RDP窗口(虽然大多数时候效果一样,但有些环境下直接关窗口可能触发会话异常)。
备注:内容来源于stack exchange,提问作者yd132




