Windows Server 断开远程桌面 RDP 后保持桌面活跃

前言

当我们需要在云端 Windows Server 上使用脚本,而通过 RDP 远程连接桌面的时候,没有正确配置可能导致 pywinauto 提示 “There is no active desktop required for moving cursors”

错误原因很简单:没有外界显示器的云端在断开原生远程桌面 RDP 后,桌面就会自动休眠锁定,这时候 Windows Server 是没有 GUI 界面的,涉及到 GUI 的自动化测试也无法继续(导致所有与窗口自动化相关的工具没有办法获取到窗口句柄),因此我们需要断开远程连接但不锁定 Windows Server 。

解决办法无非有这几种:

  • 安装模拟显示器驱动,假装接入了显示器,诱骗系统不进入桌面休眠状态。
    不过找了一圈,好用的诱骗驱动都挂在淘宝上卖起来了,离谱离谱!
  • 使用 VNC Server 或 TeamViewer 等其他远控方式。
    这是我本来的方案,稳定工作了大半年,但某次我使用远程桌面连接并断开过后,VNC的方法就不再管用了,实在让人摸不着头脑唔。再说了,VNC Server 是收费软件,大费周折找盗版好像也不算很好的解决方法。

好在翻了一圈后有了新的解决方法(来自 Smartbear):如果通过 %windir%\System32\tscon.exe RDP-Tcp#*NNN* /dest:console 手动断开 RDP 的话,原桌面也不会休眠,其中 NNN 是当前远程桌面的 session

可用下面一段脚本自动完成:

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console
)

另存为 bat 文件,每次断开 RDP 时不要关闭 RDP 客户端,而通过右键→以管理员身份运行来手动断开 RDP

添加新评论