徒手帮 process explorer 找回丢失的进程列
缘起
目前开发是在华为云桌面里进行的,在远端机器上装了 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及以后的版本)已经做了优化。其实是可以通过拖动调整列宽的,我当时拖动的位置有些问题(我拖动的是列标题),像下面这样拖动就可以了。

drag-to-adjust-column 
总结
Registry Workshop比系统自带的注册表编辑器更好用,可以试试。spy++可以查看窗口句柄,还可以监听窗口消息。Sysinternals系列工具的配置保存在注册表中HKEY_CURRENT_USER\Software\Sysinternals\。
