当我的程序启动的应用程序崩溃时自动丢弃 windows 消息错误对话框(Win7-32​​、C++、VSE2013)

Automatically discard windows msg error dialog when app started by my program crashes (Win7-32, C++, VSE2013)

我正在编写一个小实用程序来监视和重新启动 Windows 7 32 位下的其他控制台应用程序(具有已知且恒定的 .exe 名称和路径)。我使用 C++ 和 MS VS Express 2013。 问题是有一种可能性,即在重新启动时,受监视的应用程序可能会崩溃,从而产生有关崩溃详细信息的错误对话框。我的实用程序旨在每隔 1-2 分钟重新启动应用程序,直到它成功运行(是的,我知道这不是一件好事,但我无法访问原始应用程序源,所以我必须实现这样的 "patch"). 所以我的问题是 - 如何以最有效的方式 disable/auto 关闭机器上其他应用程序生成的对话框? 也非常感谢有关开发此类应用程序的任何提示。

编辑感谢您的回答,目前已通过以下代码解决:

while (true)        
{
    //Check if output file of controller_id_780M.exe is updating
    if (!controller_id_780M_OUTPUT_OK)
    {
        std::system("taskkill /F /T /IM controller_id_780M.exe");
        std::system("taskkill /F /T /IM WerFault.exe");
        ShellExecute(NULL, TEXT("open"), TEXT("controller_id_780M.exe"), NULL, NULL, SW_SHOWDEFAULT);
    }
    Sleep(100000);
}

您可以使用 Windows 函数 EnumWindowsProc 来查找错误 window,尝试在 EnumWindowsProc 函数循环中使用:GetWindowTextGetClassName它应该包含像 "error"、"warning" 这样的字符串。然后你有了这个 window HANDLE,所以你可以向 window.

发送正确的消息

在启动其他进程之前,调用 SetErrorMode(SEM_NOGPFAULTERRORBOX)。这会抑制崩溃对话框。错误模式被子进程继承,所以子进程不会显示崩溃对话框。