应用程序正在启动但不显示 UI

应用程序正在启动但不显示 UI

我尝试从 Windows 开始菜单照常启动应用程序。经过约 30 分钟,我得到了以下效果:

  • 带有 GUI 的应用程序不再显示。
  • 我可以继续使用已经打开的 GUI 应用程序
  • 我可以打开非 GUI/控制台应用程序(如cmd)。
  • 从命令行提示符中,我可以看到 GUI 应用程序已使用以下方式启动tasklist

以下是一个例子:

>tasklist | find "taskmgr"
taskmgr.exe                   4352 Console                    1      7.216 K
taskmgr.exe                   7824 Console                    1      7.216 K
taskmgr.exe                   7232 Console                    1      7.232 K

可以想象,我尝试启动任务管理器来诊断问题 3 次。但没有任务管理器窗口显示出来。

假设按照tasklist启动顺序显示进程,我粗略地确定了问题所在:

...
openAgent.exe                 7012 Console                    1    592.440 K Not Responding
...
WerFault.exe                  3592 Console                    1     10.112 K Unknown
...

openAgent是我关闭的应用程序(或至少尝试关闭,因为它似乎仍在运行)。一定是由于 的存在导致某些程序崩溃WerFault,但我没有看到 Windows 错误报告对话框。

openAgent使用强制终止应用程序后taskkill /pid 7012 /f,我尝试启动的所有应用程序突然出现。

现在查看 Windows 错误报告对话框,它显示异常80000003,这是一个(调试)断点。

这里发生了什么?我想从 Windows 内部的角度了解情况。理论上我希望用户模式应用程序的崩溃不会影响其他应用程序。

不幸的是,我既没有该情况的内核转储,也没有该情况的用户模式崩溃转储openAgent,所以这就是我能给你的所有信息。

我的系统是 Windows 7 SP1 x64 Enterprise,没有待处理的 Windows 更新,Intel Core i7 CPU。openAgent是测试自动化工具 MicroFocus 的 SilkTest 的可执行文件。

答案1

我可以再次重现该问题,结果发现安装了一个名为“同一家公司”的openAgent钩子。OsHookDll_x86

此钩子适用于DispatchHookW()

2:010> k
...
0049f2b0 75a86381 OsHookDll_x86!GetMessageHook+0x37
0049f2cc 75a780a9 USER32!DispatchHookW+0x38
...
0049f544 5eff5709 USER32!PeekMessageW+0x108

这会影响 Windows 消息循环。任何 GUI 应用程序运行时都需要 Windows 消息循环。

该钩子将 Windows 消息发送到openAgentvia USER32!SendMessageW(),但openAgent被 Windows 错误报告 ( WerFault) 暂停,因此无法处理此类消息,从而导致超时:

1:009> k
ChildEBP RetAddr  
00138f90 75a79886 USER32!NtUserMessageCall+0x15
00138fcc 75a797f3 USER32!SendMessageTimeoutWorker+0xa6
00138ff4 59d6066c USER32!SendMessageTimeoutW+0x21
...

我无法完全分析其余部分,因为在我的调试会话期间,其他一切也开始冻结。我假设钩子试图重新发送消息而不是返回,从而导致无限循环。

!analyze -v由于缺少符号ntdll

相关内容