使用Process的默认参数启动exe会造成子进程打开的句柄关闭不了,可能默认的参数使用CreateProcess使用了共享句柄的方式,记录一下,该使用Windows Api 就正常了,如下:
if (mPid == 0 || checkEditorProcessExist() == false)
{
QString exeFile = g_appInfo->GetSetupPath() + "Tools/HLMSEditor/bin/HLMSEditor.exe";
QString workPath= g_appInfo->GetSetupPath() + "Tools/HLMSEditor/bin";
//QProcess::startDetached(exeFile, QStringList(), workPath, &mPid);
STARTUPINFO pi = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION procinfo;
BOOL success=CreateProcess(NULL, const_cast<LPSTR>(exeFile.toStdString().c_str()), NULL, NULL,
false, CREATE_DEFAULT_ERROR_MODE|CREATE_UNICODE_ENVIRONMENT, NULL,
const_cast<LPSTR>(workPath.toStdString().c_str()), &pi, &procinfo);
if (success)
{
mPid = procinfo.dwProcessId;
CloseHandle(procinfo.hThread);
CloseHandle(procinfo.hProcess);
}
}