有人知道MessageBox(...)如何无声地失败吗?
MessageBox(g_hMainhWnd, buffer, "Oops!", MB_OK | MB_ICONERROR);
ShellExecute(0, "open", "http://intranet/crash_handler.php", NULL, "", SW_SHOWNORMAL);
对于一个小上下文,此代码在我们自己的异常处理程序中调用,该处理程序使用SetUnhandledExceptionFilter()注册
大多数情况下,我会看到消息框,然后启动Web浏览器。
但是,我有一个exe,据我所知,使用这个确切的代码,它成功启动了Web浏览器,但我没有先看到消息框。
由于
添
破解了。我试图故意传入垃圾HWND并且没有出现消息框。
谢谢Brian!
答案 0 :(得分:5)
只是一个想法,但可能g_hMainhWnd
无效?当您为第一个参数添加NULL
时,查看它是否有效。
我建议在调用后调用GetLastError
并将输出写入文件。这样你就可以看到Windows认为错误是什么。 MSDN MessageBox文档提到它为此API设置了GetLastError
,如果失败则返回零。
答案 1 :(得分:0)
这是Windows Mobile中的一个常见问题,每当错误触发关闭时(我假设在你的情况下会发生什么,给定你要去的URL)。即使捕获未处理的异常,也可以在应用程序关闭之前可靠地执行一堆语句,但可能会显示或不显示MessageBoxes。它们几乎总是在通过Visual Studio在调试中运行应用程序时显示,但当应用程序作为已编译的EXE运行时,它们几乎不会出现。
奇怪的是,如果你在这种情况下两次调用MessageBox,第二个调用通常会显示一个框(即使在EXE中)。
我不知道常规Windows是否存在同样的问题,但听起来你正在描述完全相同的情况。在这里完全猜测,但是Windows操作系统可能知道请求消息框的应用程序处于死亡状态,并明智地忽略了请求(在过去,死亡的应用程序经常被用来引发一连串的“帮助我” ,我正在死“消息框”。