- QProcess::startDetached 传递命令行参数,双引号丢失
QStringList args;
args << QString(" -agr1=\"%1\"").arg(arg1);
args << QString(" -agr2=\"%1\"").arg(arg2);
QProcess::startDetached(cmdPath, args);
用Process Explorer工作查看上面新进程的命令行,发现agr1参数的双引号不正确。
这个问题在win7系统存在,win10系统是ok的
替代方案:
QString args;
args += QString(" -agr1=\"%1\"").arg(arg1);
args += QString(" -agr2=\"%1\"").arg(arg2);
QProcess::startDetached(cmdPath + args);
这个方案也有问题。
最终解决办法:
ShellExecuteA(nullptr, "open", cmdPath .toLocal8Bit().data(),
args.toLocal8Bit().data(), nullptr, SW_SHOW);
- QProcess::start 默认继承父进程句柄
默认继承句柄可能导致一些问题。比如父进程的日志文件需要独占使用,不希望子进程看到。
改变默认继承句柄的方式如下:
QString strCmd = "test.exe";
m_proc.setCreateProcessArgumentsModifier([](QProcess::CreateProcessArguments *args) {
args->inheritHandles = false;
});
m_proc.start(strCmd );