远程桌面截图出现黑屏的解决办法

远程桌面截图出现黑屏的解决办法
2017-02-15 10:59:11   来源:   评论:0 点击:268

第一步:mstsc admin v:服务器IP 连接远程服务器,启动截屏服务第二步:在远程时,输入rscon exe 0 dest:console,自动管理远程连接,OK,截屏将不会出现黑屏
第一步:mstsc /admin /v:服务器IP 连接远程服务器,启动截屏服务
第二步:在远程时,输入rscon.exe 0 /dest:console,自动管理远程连接,OK,截屏将不会出现黑屏
 
ConnectionFile 指定用于连接的 .rdp 文件的名称
/v:server[;port] 指定要连接的远程计算机
/admin 将连接到会话以管理服务器
/f 在全屏幕模式下启动“ 远程桌面”连接
/w:width 指定 远程桌面窗口的宽度
/h:height 指定 远程桌面窗口的高度
/public 在公用模式下运行远程桌面
/span 是远程计算机的高度和宽度与本地虚拟桌面相匹配,如有必要扩展到多个显示器。若要扩展到多个显示器,所有显示必须具有相同的高度并垂直排列
/console 连接到指定 Windows 2000 Server 的控制台会话
/edit 打开指定的 .rdp 文件进行编辑
/migrate 将使用“客户端连接管理器”创建的旧版连接文件迁移到新的 .rdp 连接文件中.
简而言之: 使用MSTSC远程登录SERVER,只是登录到对方的虚拟桌面.(一台SERVER一般支持2个以上的用户登录到自己的虚拟桌面,而这2个用户之间运行的程序是互相看不见的)
使用MSTSC /ADMIN登录SERVER,是登录到对方的终端模式.(即表明当时你就做为管理员身份在操作这台SERVER)
 
参考地址
http://support.microsoft.com/kb/243202/
http://www.vbforums.com/showthread.php?p=3657773

一、遇到的问题

在Windows桌面软件进行UI自动化测试时,如果只为了替换手工,编写的测试脚本只在实体机上运行的话,不会涉及到远程桌面连接的问题。但在工作中,我们经常会将测试脚本部署到虚拟机上去执行,从而在自动化测试执行过程中,还可以进行一些其他的工作。这时,问题来了,如果只是在虚机后台运行而没有远程桌面连接的话,鼠标点击、键盘操作事件均是无效的,如何解决呢?

于是我们就在自己的工作机上,远程连接上了虚机,执行测试脚本,ok,一切顺利,但是当我们把远程连接窗口最小化时,问题又出现了,鼠标键盘模拟又失效了!!为啥呢?

二、原因分析

当我们通过mstsc启动远程桌面连接时,被连接的Windows会启动一个会话(Session)。此时你对远程桌面窗口里面的所有操作(鼠标,键盘)将会‘翻译’成TCP包传输过去,被连接的Windows接收到这些包之后,‘还原’命令并且在当前的活动会话上面执行。而当你断开连接时(点X关闭),会话变成断开状态,Windows会自动关闭会话(这里这样说是不准确的,事实上会话还是在的,只是状态变成断开的),也就导致了所有基于GUI的操作‘失效’了。而当最小化远程桌面时,Windows为了节约网络带宽传输,会暂时‘关闭会话’,导致你的模拟操作程序失效。

三、问题解决

为了能够让测试脚本正常执行,第一个想到的办法就是,远程连接上虚机,永远不要关,也不要最小化。当然,我们如果能够操作虚机所在的远程机器的话,我们可以在远程机器上登录虚机,然后永远不再远程登录虚机。这两个方法最直接,但也是最弱的,有没有更好的方案呢?

1 注册表法

如果从A机器通过远程桌面连接到机器B,则我们需要修改机器A上的注册表项,步骤如下:

  1. 运行regedit
  2. 找到注册表项HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client
  3. 创建一个类型为DWORD的注册表值项RemoteDesktop_SuppressWhenMinimized并设置值为2
  4. 然后找到注册表项HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client
  5. 创建一个类型为DWORD的注册表值项RemoteDesktop_SuppressWhenMinimized并设置值为2
  6. 关闭注册表编辑窗口

    PS:如果你想针对所有用户进行修改的话,只需要将HKEY_LOCAL_MACHINE下对应的项修改即可。完成以上操作后,如果在A机器上连接机器B后,窗口最小化后,鼠标键盘操作也可以正常模拟了。

2 自登陆法

我们远程连接上虚机后,可以在远程虚机上执行一个bat脚本,使得虚机能够自己登陆自己,bat脚本如下:

@%windir%\System32\tscon.exe 0 /dest:console

@%windir%\System32\tscon.exe 1 /dest:console

@%windir%\System32\tscon.exe 2 /dest:console

将脚本内容,保存为Close_RDP.bat,在远程虚机上双击运行,正常情况下,虚机会自动关闭,在虚机关闭的情况下,鼠标键盘的模拟仍然是生效的,不过此方法存在不太稳定的情况,不推荐使用。

3 开源远程桌面连接软件法

使用C#开源远程桌面连接软件Multi RDP Client .NET,当远程连接上后,最小化的情况下,鼠标键盘模拟仍然是生效的。另外由于是开源软件,所以我们可以在源码基础上,扩展自己的功能,比如说在自动化测试过程中,接收请求,自动远程连接相应机器,来满足自动化测试的需求。另外,使用第三方远程连接软件,我们可以将软件的数据保存到远程的数据库中,这样,我们只需要有软件,不需要知道机器密码就可以使用执行机器了。

四、总结

以上几种解决远程桌面问题的方法,在工作中都有可能用到,比如说在脚本初期,我们使用到的机器不是太多的情况下,脚本的运行需要手工进行,这时,我们可以采用注册表法,这样就可以将远程桌面的窗口最小化到任务栏了;而当我们机器不断增多时,比如说自动化执行的机器超过了10个甚至更多,这时我们最好借助开源远程连接软件了。对于大规模的虚机管理,我们推荐使用开源远程连接软件来进行管理。

如果你有任何疑问或建议的话,欢迎发送消息到“ 搜狗测试 ”公众号,我们会在第一时间与你联系

你可能感兴趣的:(windows)