TL; DR - Spy ++工具如何构建其进程列表?
我们有一个MFC桌面应用程序(在Windows XP上运行),它不再对任何用户输入作出反应。但是,当通过alt-tab切换到它时, 重新绘制。 (它确实收到WM_SETFOCUS
,WM_ACTIVATE
等。它显然没有收到任何鼠标或键盘消息。)
由于应用程序悬而未决,我们提取了一些进程转储,但到目前为止这些都没有什么帮助。输入:
我们使用Spy ++查找上面提供的有关此应用程序似乎要处理的窗口消息的信息。我们通过打开Windows View 并选择我们的应用程序窗口并在所选的消息属性Windows of same process
和Messages to View
中Select All
来完成此操作。
然而我们首先尝试通过打开Spy ++的Processes View 来查看此流程的所有消息,我们的应用程序未在此流程列表中显示< / strong>即可。在应用程序正常运行的另一台PC上交叉检查,该过程通常也会显示在Spy ++的进程列表中。
可以从Spy ++的Process View 中未显示该流程的事实推断出行为不当的应用程序,但应用程序的主窗口显示在Windows视图中。 为什么具有可见主窗口的进程不会在Spy ++的进程视图中显示?
该过程列在任务管理器和Visual Studio 2005的附加过程窗口中。所以这些工具显然使用不同的方法列出进程而不是Spy ++ ...?
应用程序当前挂起的系统是Windows XP SP2系统,我们使用了Visual Studio 2005附带的Spy ++ Utility。
这种行为偶尔会重复出现,但只有在应用程序运行了好几天后才会出现!
答案 0 :(得分:2)
运行Vista或更高版本?您的流程可能会提升,Spy ++则不然。较新版本的Spy ++需要提升。因此,请尝试明确提升Spy ++,看看是否有帮助。
答案 1 :(得分:0)
是的,当然可以从中推断出事情。在这种情况下,不要采取我认真对待的任何事情,我必须去看看代码。但是我相信Spy会看到EnumProcesses API。 (http://msdn.microsoft.com/en-us/library/ms682629.aspx)
所以,如果您的流程没有显示在那里...... hrm。
但是,它工作的系统与不工作的系统之间有什么不同?
答案 2 :(得分:0)
Spy++ 需要禁用注册表中的以下两个值 (0) 才能显示进程/线程列表:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
HKLM\System\CurrentControlSet\Services\PerfProc\Performance
Disable Performance Counters -> either 0 or not present
试图找出它拒绝显示它们的原因,我快疯了。这是一个糟糕的笑话——这个调试器本身需要一个调试器才能让它工作!并不是说 WinDBG 会显示任何有意义的信息,MS 甚至没有在其符号服务器上提供符号文件,pfft。
无论如何,也许它不会显示禁用了性能计数器的进程,因为我认为,这可以根据个人情况进行设置,至少对于服务而言,例如:
HKLM\SYSTEM\CurrentControlSet\Services\.NET CLR Networking\Performance
Disable Performance Counters
所以它基本上总是“性能”子项的值。所有这些东西都没有记录,它使用了 advapi32.dll 函数,如“PerfRegQueryValue”和“PerfRegQueryInfoKey”……别问我。