在已开的进程进行重新启动可能在前一个程序还没关闭之前会进行重启,这时候就会检测就会有问题。
利用bat脚本进行外部启动,可避免这个问题。
connect(qApp, &QGuiApplication::lastWindowClosed, this, &MainWidget::OnCheckProcess);
qApp->closeAllWindows();
退出之前把需要保存的保存,然后kill进程。
OnCheckProcess()
{
QString l_cmd = QString("taskkill /im %1.exe /f").arg(qApp->applicationName());
QString l_path = qApp->applicationDirPath() + "/reboot.bat";
QProcess l_process;
l_process.startDetached(l_path);
l_process.execute(l_cmd);
l_process.close();
}
reboot.bat的内容:
@ECHO OFF
::这个文件放在exe同级的目录下
set FilePath=%~dp0
set file=%FilePath%Test.exe
for /f "delims=" %%I in ("%file%") do set "image=%%~nxI"
:begin
tasklist|find /i "%image%"
if "%errorlevel%"=="1" goto reboot
goto begin
goto :eof
:reboot
start "" "%file%"
exit
goto :eof
如果有其他方法请不吝赐教