缘起
目前开发是在华为云桌面里进行的,在远端机器上装了 v15.05
版(很老的版本了)的 process explorer
。但是今天打开 process explorer
后,Process Name
列消失不见了。
就是下面这样,是不是少了点什么?
说明:因为华为客户端的安全限制,不能直接截屏。本文中的截图,视频都是在我本机录制的。
排查
第一反应是:难道我不小心把它隐藏了?于是赶紧查看设置,如下图:
Process Name
和 PID(Process Identifier)
列都是勾选的,而且不可以取消勾选。排除了手动隐藏的可能。难道是列宽太小了?于是尝试拖拽了几次,也没成功。
尝试 spy++
相信很多搞 windows
开发的小伙伴儿应该都用过 spy++
(对应的应用程序名是 spyxx.exe
)查看窗口句柄。于是,打开 spy++
,查看对应的窗口句柄,但是并没有发现有价值的线索。
其它思路
除了
spy++
可以查看窗口句柄,还有其它比较 “偏门” 的工具可以查看。比如,基于UIA
(UI Automation)或MSAA
(Microsoft Active Accessibility )机制的相关工具:UISpy.exe, Inspect.exe, AccEvent.exe
等。但是,这种工具远程机上也没有。除了查看窗口信息,当然更好的工具是排错神器
process monitor
了。但是远程机上也没有process monitor
。猜?......
看来工具是用不上了,只能手工排查了。
徒手排查
之前解决过 Sysinternals
系列软件中的 Autorun
不显示的问题,记录在文章 1分钟解救 run 不出来的 Autoruns 中了,感兴趣的小伙伴儿可以读一下。根据上次的经验,Sysinternals
系列工具的配置应该都记录在注册表中了,而且存储在 HKEY_CURRENT_USER
下(很好的设计,只针对当前用户有效,而且设置的时候不需要管理员权限)。于是打开 Registry Workshop
,浏览到 process explorer
保存配置的位置——
HKEY_CURRENT_USER\Software\Sysinternals\Process Explorer
。
快速翻看右侧的注册表项。其中的 ProcessImageColumnWidth
引起了我的注意,这个名字起的太形象了,而且值还是 0
,很有可能是关键设置。果断关闭 process explorer
(这个是常识了,先关闭程序,再改配置),然后修改 ProcessImageColumnWidth
的值为 100
,重新启动 process explorer
。果然丢失的 Process Name
列又显示出来了。
说明
在本地尝试重现的过程中发现这个问题只会出现在老版本(
v15.05
及以前)中,新版本(v16.20
及以后的版本)已经做了优化。其实是可以通过拖动调整列宽的,我当时拖动的位置有些问题(我拖动的是列标题),像下面这样拖动就可以了。
总结
Registry Workshop
比系统自带的注册表编辑器更好用,可以试试。spy++
可以查看窗口句柄,还可以监听窗口消息。Sysinternals
系列工具的配置保存在注册表中HKEY_CURRENT_USER\Software\Sysinternals\
。