断开连接后,RDP会话的GUI是否仍然有效

use*_*890 7 rdp vps windows-server-2008

我正在运行自动化测试程序,可以全天候模拟击键和鼠标点击.

虽然它在本地运行良好,但在RDP会话中,它会在最小化或断开连接后停止运行.显然,如果您无法在屏幕上看到GUI,则GUI不存在.

有一个注册表解决方法可以保持GUI处于活动状态以最小化窗口,但我知道在断开连接后无法使其保持活动状态.

理想情况下,我会在服务器Windows控制台会话上运行,它不关心断开连接,但在托管环境中(我尝试过Amazon和Go Daddy),无法访问控制台会话.

有谁知道我怎么能解决这个问题?基本上任何允许我在VPS上运行我的应用程序的解决方案.我需要主机的可靠性,但运行它的灵活性就像我坐在前面一样.

小智 9

是的你可以。

Windows中有两种类型的会话:“控制台”会话始终处于活动状态,并且最多只能有一个RDP会话和“终端”会话之一。在Github上使用“ rdpwrap”,您可以拥有无​​限数量的终端会话。

如果没有连接,RDP会话将变为“已停用”。程序仍将运行,但是任何依赖于GUI交互的东西都将严重损坏。

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

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

这将使您与会话断开连接,但仍将在完整的图形上下文中运行。这回答了您的问题。您可以重新连接到它,它将再次成为终端会话,并且可以无限执行此操作。而且,自动热键当然可以完美地工作。

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

要获得无限数量的图形持久会话,您可以运行远程桌面并从上述“主”会话中启动终端会话。通常,远程桌面可以防止这种“回送”行为,但是,如果为目标指定“ 127.0.0.2”,则可以与远程计算机上的任意数量的用户启动终端会话。

除非您在以下注册表位置上创建RemoteDesktop_SuppressWhenMinimized并将其设置为2,否则图形持久性将仅在未最小化的情况下出现在终端服务器上:

HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client
Run Code Online (Sandbox Code Playgroud)

这样,您可以从一台计算机上获得无限数量的完全独立的图形持久远程会话。

为简化起见,我制作了一小批批处理文件,只需单击几下即可完成所有这些工作。

  • 我在命令运行中收到错误:“%%s 此时出现意外” (2认同)

los*_*rce 6

这可能是一种解决方法,尽管我自己还没有尝试过,而且它涉及拥有另一台机器

假设您正在创建一个到 myserver.com 的会话

本地客户端----> myserver.com

您可以尝试拥有一个单独的服务器(我们称之为 myslave.com)并使用它来建立会话,而不是这样做

本地客户端----> myslave.com ----> myserver.com

然后,如果您断开Local Client ---> myslave.com会话,会话之间的 GUImyslave.com ----> myserver.com应保持活动状态。

只有当您连接到 myslave.com 的控制台会话时,它才会起作用。

  • 至少对于 Windows 10,情况不再是这样:如果您与 myslave.com 断开连接,那么 myserver.com 也会丢失 GUI 上下文。 (5认同)