问题
windows远程桌面打开时,可以正常进行截屏操作。但如果远程退出了或最小化,会发现这时截屏的结果的黑屏,或者程序会报异常。 这使得一些爬虫或自动化测试运行时可能会存在问题。
分析
在Windows XP, Windows Server 2003或者更早期的Windows操作系统中,所有的服务和应用程序都是运行在与第一个登录到控制台的用户得Session中。这个Session叫做Session 0。在Session 0 中一起运行服务和用户应用程序,由于服务是以高权限运行的,这样就存在一些安全风险。
在Windows7中,服务在一个叫做Session 0 的特殊Session中承载。由于应用程序运行在用户登录到系统后所创建的Session 0 之后的Session中,所以应用程序和服务也就隔离开来:第一个登录的用户在Session 1中,第二个在Session 2中,以此类推。事实上运行在不同的Session中,如果没有特别将其放入全局命名空间(并且设置了相应的访问控制配置),是不能互相传递窗体消息,共享UI元素或者共享kernel对象。
解决方法: 使用tscon
tscon.exe
作用是粘贴用户会话到终端对话。
文档地址: https://technet.microsoft.com/zh-cn/library/cc770988(v=ws.10).aspx
语法:
tscon {<SessionID>|<SessionName>} [/ 目标: <SessionName>] [/ 密码: <pw>|/ 密码: *] [/v]
如何查看当前session ID
在服务端运行:
query user
其中的ID列,即时session ID。
完整操作步骤
- 在client上执行:
mstsc /admin /v:47.92.136.27
- 服务器打开后,在服务器创建脚本:
for /f "skip=1 tokens=3 usebackq" %%s in (
`query user %username%`
) do (
%windir%\System32\tscon.exe %%s /dest:console
)
- 在服务器以管理员权限脚本
参考文章:
http://blog.csdn.net/c0ast/article/details/18285645
https://serverfault.com/questions/428975/how-to-use-tscon-on-windows7