#include "launcher.h" #include #include "logproc.h" #include #include #include #include #include "CLogTrack.h" #include long __stdcall CrashInfocallback(_EXCEPTION_POINTERS *pexcp) { //创建 Dump 文件 HANDLE hDumpFile = ::CreateFile( L"launcher.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDumpFile != INVALID_HANDLE_VALUE) { //Dump信息 MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ExceptionPointers = pexcp; dumpInfo.ThreadId = GetCurrentThreadId(); dumpInfo.ClientPointers = TRUE; //写入Dump文件内容 ::MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL ); } EXCEPTION_RECORD* record = pexcp->ExceptionRecord; QString errCode(QString::number(record->ExceptionCode,16)), errAdr(QString::number((uint)record->ExceptionAddress,16)); HWND task = nullptr; task=FindWindow(L"Shell_TrayWnd",nullptr); if(task) { ShowWindow(task,SW_SHOW);//隐藏任务栏 } QMessageBox::critical(NULL,QString::fromLocal8Bit("程序崩溃"), QString::fromLocal8Bit("
对于发生的错误,表示诚挚的歉意
")+ QString::fromLocal8Bit("
错误代码:%1
错误地址:%2
").arg(errCode).arg(errAdr), QMessageBox::Ok); myDebug()<("examcloud", "cn-shenzhen.log.aliyuncs.com", "student_2_client"); QApplication a(argc, argv); g_appInfoPtr = std::make_shared(); QFileInfo file("coe.cfgi"); QString sFilePath = file.absoluteFilePath(); QSettings set(sFilePath, QSettings::IniFormat); g_appInfoPtr->m_bShowDebugInfo = set.value("config/debug", false).toBool(); qInstallMessageHandler(CustomOutputMessage); ::SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashInfocallback); QProcess process; process.start("taskkill /f /im client.exe"); process.waitForFinished(); launcher w; w.show(); return a.exec(); }