排错实战 | 徒手帮 process explorer 找回丢失的进程列

缘起

目前开发是在华为云桌面里进行的,在远端机器上装了 v15.05 版(很老的版本了)的 process explorer。但是今天打开 process explorer 后,Process Name 列消失不见了。

就是下面这样,是不是少了点什么?

missing-process-name-column

说明:因为华为客户端的安全限制,不能直接截屏。本文中的截图,视频都是在我本机录制的。

排查

第一反应是:难道我不小心把它隐藏了?于是赶紧查看设置,如下图:

view-column

Process NamePID(Process Identifier) 列都是勾选的,而且不可以取消勾选。排除了手动隐藏的可能。难道是列宽太小了?于是尝试拖拽了几次,也没成功。

can-not-show-process-name-column

尝试 spy++

相信很多搞 windows 开发的小伙伴儿应该都用过 spy++ (对应的应用程序名是 spyxx.exe)查看窗口句柄。于是,打开 spy++ ,查看对应的窗口句柄,但是并没有发现有价值的线索。

view-window-by-spyxx

其它思路

  • 除了 spy++ 可以查看窗口句柄,还有其它比较 “偏门” 的工具可以查看。比如,基于 UIAUI Automation)或 MSAAMicrosoft 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

setting-reg-key

快速翻看右侧的注册表项。其中的 ProcessImageColumnWidth 引起了我的注意,这个名字起的太形象了,而且值还是 0,很有可能是关键设置。果断关闭 process explorer(这个是常识了,先关闭程序,再改配置),然后修改 ProcessImageColumnWidth 的值为 100,重新启动 process explorer。果然丢失的 Process Name 列又显示出来了。

process-explorer-normal-status

说明

  • 在本地尝试重现的过程中发现这个问题只会出现在老版本(v15.05 及以前)中,新版本(v16.20 及以后的版本)已经做了优化。

  • 其实是可以通过拖动调整列宽的,我当时拖动的位置有些问题(我拖动的是列标题),像下面这样拖动就可以了。

    drag-to-adjust-column

总结

  • Registry Workshop 比系统自带的注册表编辑器更好用,可以试试。
  • spy++ 可以查看窗口句柄,还可以监听窗口消息。
  • Sysinternals 系列工具的配置保存在注册表中 HKEY_CURRENT_USER\Software\Sysinternals\
BianChengNan wechat
扫描左侧二维码关注公众号,扫描右侧二维码加我个人微信:)
0%