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

时间:2013-04-08 19:52:54

标签: windows-server-2008 vps rdp

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

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

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

理想情况下,我会在服务器Windows控制台会话上运行,这不关心是断开连接但是在托管环境中(我试过亚马逊和Go Daddy)没有办法访问控制台会话。

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

4 个答案:

答案 0 :(得分:5)

是的,可以。

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

与RDP会话没有连接时,它们将被“停用”。程序仍然可以运行,但是任何依赖GUI交互的东西都会严重损坏。

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

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

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

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

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

只有在未将图形持久性最小化的情况下,这些图形持久性才会出现在终端服务器上,除非您在以下注册表位置创建并将 RemoteDesktop_SuppressWhenMinimized 设置为 2

HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client

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

为了简化起见,我做了一个small set of batch files,只需点击几下就能完成所有这些操作。

答案 1 :(得分:4)

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

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

  

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

您可以尝试使用单独的服务器(让我们称之为myslave.com)并使用它来建立会话

而不是这样做
  

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

然后,如果您断开Local Client ---> myslave.com会话,myslave.com ----> myserver.com之间会话的GUI应保持有效。

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

答案 2 :(得分:2)

我找到了类似的方法。我有同样的问题,我下载了rdp wraper,它允许你配置多个会话rpd服务器和一个包含的工具(rdpchecker.exe)允许你连接到localhost所以你可以从你的服务器连接到你的服务器,你不需要中间客户。

答案 3 :(得分:0)

  

这可能是一种解决方法,尽管我自己没有尝试过,但这涉及到>另一台机器

     

让我们假设您现在正在创建与myserver.com的会话

     

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

     

您可以尝试使用单独的服务器(将其称为myslave.com)来代替它,而是使用它来建立会话

     

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

     

然后,如果您断开本地客户端---> myslave.com会话的会话GUI,
     之间myslave.com ----> myserver.com应该保持活动状态

如果您使用的是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.