• HOME
  • DOCS
  • WTF
  • TECH
  • LIFE
  • PAGES
    • ARCHIVE
    • TAGS
    • ABOUT
    • FRIENDS
    • RSS
  • TOOLS
    • GEO
    • RANDOM()
    • GOO.GL
    • CSS HEART
Aj's Blog

记录时间溜走的瞬间和折腾过的那些事

Windows RDP下GUI的一些问题

2015-06-01  TECH  GUI  RDP  ScreenShot  windows  wmi  wmic  

本文提及的windows server指的是windows 2003 x86,其他版本未做测试

需求:一个常驻程序定期抓取服务器的GUI界面,监控程序(第三方,无log)运行情况等,

遇到的问题:RDP连接中,一切正常,RDP断开连接后,程序正常运行,所有GUI操作失败,全返回空。

参考stackoverflow上的讨论:http://stackoverflow.com/questions/26018528/watin-taking-black-screenshots-when-rdp-is-disconnected

里面提到一点 “RDP uses its own display driver, which doesn’t pass draw commands if the session is in a disconnected state”

RDP的会话是自己独立的GUI驱动,一旦回话连接断开,所有绘图操作都停止,当然也就抓不到任何GUI信息了,这是RDP特有的。

RDP下抓取GUI的路就没法走通了,有解决办法就是用VNC,但是需要额外的一大堆部署和调试工作,直接放弃此方案。

解决办法:
windows自带的 wmic query可以获取当前系统、制定进程的运行信息。
我们的需求实际上是监控程序的运行情况,通过cpu占用、线程、读写等可以综合判断出程序的运行情况。
参考资料:http://blogs.technet.com/b/askperf/archive/2012/02/17/useful-wmic-queries.aspx
如下,可以获取到每个程序对应的线程数,内存使用情况。

wmic process get CommandLine /format:value
wmic process get ThreadCount /format:value
wmic process get PageFileUsage /format:value

更多wmi的使用参考官方 https://msdn.microsoft.com/en-us/library/aa394582(v=vs.85).aspx
支持VBS等脚本,可定制自己的wmi应用,wmic只是系统自带的一个wmi命令行小工具。

—番外篇–
windows下命令行创建系统服务器的命令
在没搞清楚RDP的GUI问题之前我还尝试把程序创建为系统服务并设置允许桌面交互

#创建,注意每个=之后有一个空格
sc create mydaemon binPath= "D:\Tools\monitor.exe" start= auto DisplayName= MyMonitor
#删除
sc delete mydaemon
下一篇:   写在2015年末
上一篇:   perl script to exe with pp
暂无评论

Cancel reply