RDP会话的GUI能在断开连接后保持活动状态吗?

21

我正在运行自动化测试程序,模拟按键和鼠标点击24/7。

虽然在本地运行正常,但在RDP会话中,一旦最小化或断开连接,它就会停止运行。显然,如果你无法在屏幕上看到GUI,则它不存在。

有一个注册表解决方案可以使GUI保持活动状态以最小化窗口,但我不知道如何在断开连接后继续保持其活动状态。

理想情况下,我希望将其运行在服务器Windows控制台会话中,这样就不需要担心断开连接,但在托管环境中(我尝试了亚马逊和Go Daddy),没有办法访问控制台会话。

有人知道如何解决这个问题吗?基本上,任何允许我在VPS上运行应用程序的解决方案都可以。我需要主机的可靠性,但也需要像坐在电脑前一样的灵活性。


VMware vCenter控制台即使没有人实际观看/连接到控制台仍然保持“活动状态”。不知道这是否是VMware特有的功能,还是Citrix / VirtualBox等具有相同的能力。 - Marc B
在托管环境中,我无法访问vmware(或其他)控制部分,这是事实。 - user2029890
5个回答

32

是的,你可以。

在Windows中有两种类型的会话:始终处于活动状态的"控制台"会话,只能存在最多一个; 以及"终端"会话,例如RDP。使用Github上的"rdpwrap",您可以拥有无限数量的终端会话。

当没有连接时,RDP会话将变为"停用"状态。程序仍然会运行,但任何依赖GUI交互的内容都会出现故障。

幸运的是,我们可以通过在终端会话内运行以下命令,而不是正常断开远程桌面连接,将终端会话转换为控制台会话:

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

这将断开您与会话的连接,但它仍将以完整的图形上下文运行。这回答了您的问题。您可以重新连接到它,它将再次成为终端会话,您可以无限制地执行此操作。当然,autohotkey工作得非常好。

但是,如果您需要多个持久的、启用图形的会话呢?

要获取无限数量的图形持久会话,您可以运行远程桌面并从上述“主”会话中启动终端会话。通常情况下,远程桌面会阻止此“环回”行为,但如果您指定目标为“127.0.0.2”,则可以在远程计算机上启动任意数量的终端会话用户。

只有在终端服务器未最小化时才会存在图形持久性,除非您在以下注册表位置创建并设置RemoteDesktop_SuppressWhenMinimized2

HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client

使用此功能,您可以从单台计算机获得无限数量的完全独立的图形持久远程会话。


2
我在运行命令时遇到错误: "%%s 在此处是意外的"。 - user2983041
@user2983041 %%s 用于在 .cmd 文件中运行时使用。如果您在命令提示符中运行它,则应改为 %s。 - LPChip

8
这可能是一个解决方法,虽然我自己没有尝试过,并且需要另一台机器的参与。
假设你目前正在创建到 myserver.com 的会话:
本地客户端 ----> myserver.com
你可以尝试使用另一台服务器(我们称其为 myslave.com),并使用该服务器建立会话:
本地客户端 ----> myslave.com ----> myserver.com
然后,如果断开 Local Client -- > myslave.com 会话,则应保持 myslave.com ----> myserver.com 会话的 GUI 处于活动状态。
仅在连接到 myslave.com 的控制台会话时才起作用。

5
至少对于Windows 10来说,不再是这种情况:如果你断开与myslave.com的连接,那么myserver.com也会失去GUI上下文。 - Benny K

3
这可能是一个解决方法,虽然我自己没有尝试过,并且需要另一台机器的参与。
假设此时您正在创建到myserver.com的会话。
改为使用单独的服务器(称之为myslave.com)建立会话。
然后,如果您断开Local Client ---> myslave.com会话,则myslave.com ----> myserver.com之间的会话GUI应保持活动状态。
如果您使用的是Windows服务器,则甚至不需要另一台机器。
1) Connect to the server with the remote desktop connection (#con1).

2) Create a new alias for your server system like "127.0.0.2" in Windows\System32\drivers\etc\hosts .

3) Now establish a new remote desktop connection from your windows server (in #con1) to itself (#con2).

4) Finally start your GUI needing application e.g. UI-Path in #con2 and then close #con1.

2
我找到了类似的方法。我遇到了同样的问题,我下载了一个rdp包装器,它可以让你配置多个RDP服务器会话,并且其中包含的一个工具(rdpchecker.exe)允许你从本地主机连接到服务器,这样你就不需要那个中间客户端了。

1

我遇到了同样的问题,并注意到使用VNC(TightVNC)接管远程机器似乎可以解决这个问题。我猜测VNC使用控制台屏幕。一旦激活并登录,它会保持登录状态,即使在VNC断开连接后也是如此。请确保在电源选项中不要让屏幕关闭。

请注意,在VPS上保持控制台登录通常是不推荐的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接