1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include "launcher.h"
- #include <QApplication>
- #include "logproc.h"
- #include <windows.h>
- #include <DbgHelp.h>
- #include <QFileInfo>
- #include <QSettings>
- #include "CLogTrack.h"
- #include <QProcess>
- 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("<FONT size=4><div><b>对于发生的错误,表示诚挚的歉意</b><br/></div>")+
- QString::fromLocal8Bit("<div>错误代码:%1</div><div>错误地址:%2</div></FONT>").arg(errCode).arg(errAdr),
- QMessageBox::Ok);
- myDebug()<<QString::fromLocal8Bit("程序崩溃,错误代码:%1,错误地址:%2").arg(errCode).arg(errAdr);
- return 0;
- }
- int main(int argc, char *argv[])
- {
- // g_logPtr = std::make_shared<CLogTrack>("examcloud", "cn-shenzhen.log.aliyuncs.com", "student_2_client");
- QApplication a(argc, argv);
- g_appInfoPtr = std::make_shared<CAppInfo>();
- 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();
- }
|