我正在编写一个小工具来监视并重新启动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);
}
答案 0 :(得分:2)
在启动其他流程之前,请致电SetErrorMode(SEM_NOGPFAULTERRORBOX)
。这会抑制崩溃对话框。错误模式由子进程继承,因此子进程不会显示崩溃对话框。
答案 1 :(得分:0)
您可以使用Windows函数EnumWindowsProc
查找错误窗口,尝试在EnumWindowsProc
函数循环中使用:GetWindowText
和GetClassName
它应该包含类似&#34的字符串;错误& #34;,"警告"。然后你有这个窗口HANDLE,所以你可以向该窗口发送正确的信息。