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

时间:2015-08-18 09:38:55

标签: c++ windows-7

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

编辑感谢您的答案,到目前为止已完成以下代码:

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);
}

2 个答案:

答案 0 :(得分:2)

在启动其他流程之前,请致电SetErrorMode(SEM_NOGPFAULTERRORBOX)。这会抑制崩溃对话框。错误模式由子进程继承,因此子进程不会显示崩溃对话框。

答案 1 :(得分:0)

您可以使用Windows函数EnumWindowsProc查找错误窗口,尝试在EnumWindowsProc函数循环中使用:GetWindowTextGetClassName它应该包含类似&#34的字符串;错误& #34;,"警告"。然后你有这个窗口HANDLE,所以你可以向该窗口发送正确的信息。