#include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define KEY_EXE_PATH "LANDEVAL_PATH" BOOL IsExistProcess(const char* szProcessName) { PROCESSENTRY32 processEntry32; HANDLE toolHelp32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (((int)toolHelp32Snapshot) != -1) { processEntry32.dwSize = sizeof(processEntry32); if (Process32First(toolHelp32Snapshot, &processEntry32)) { do { size_t i; int iLen = 2 * wcslen(processEntry32.szExeFile); char* chRtn = new char[iLen + 1]; //转换成功返回为非负值 wcstombs_s(&i,chRtn,iLen + 1, processEntry32.szExeFile, iLen + 1); if (strcmp(szProcessName, chRtn) == 0) { return TRUE; } } while (Process32Next(toolHelp32Snapshot, &processEntry32)); } CloseHandle(toolHelp32Snapshot); } // return FALSE; } int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); QSettings sets("sys.ini", QSettings::IniFormat); QString exeAbsPath = sets.value(KEY_EXE_PATH).toString(); if ("" == exeAbsPath) { QString exepath = QFileDialog::getOpenFileName(0, "选择程序", "D:/zyj/QT/build-ProcessTest-Desktop_Qt_5_12_8_MSVC2017_32bit-Debug/debug", "Exe files (ProcessTest.exe)"); qDebug() << exepath; if ("" != exepath) { sets.setValue(KEY_EXE_PATH, exepath); } } else { // 检测程序是否还在运行 while (1) { QString loginfo; QFile file("restart_landeval_recored.txt"); exeAbsPath = sets.value(KEY_EXE_PATH).toString(); QString exeName = exeAbsPath.split('/').last(); if(!IsExistProcess(exeName.toStdString().c_str())){ loginfo += QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); loginfo += "|"; loginfo += exeName; loginfo += "|"; loginfo += "restart\n"; file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append); QTextStream out(&file); out << loginfo; file.close(); //开启进程 QProcess newProg; newProg.start(exeName, QStringList()<<"command"); //定时 //Sleep(15*1000); Sleep(2*3600*1000); //杀死进程 QProcess taskkill; taskkill.execute("taskkill", QStringList()<<"-im"<