使用QProcess运行进程时,为了方便使用运行程序,直接使用程序名字运行。但是这时候需要设置环境变量。可是使用
setProcessEnvironment
怎么设置也不能设置成功。运行QProcess却是一直返回'文件找不到'的现象。下面让我们来窥探究竟吧。
QProcess* myProcess = new QProcess(this);
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("PATH", "C:/AppPath;" + env.value("PATH"));
myProcess->setProcessEnvironment(env);
myProcess->start("App.exe");
QProcess* myProcess = new QProcess(this);
QString path = "C:/AppPath;" + qgetenv("PATH");
qputenv("PATH", path.toStdString().c_str());
myProcess->setProcessEnvironment(env);
myProcess->start("App.exe");
bool QProcessPrivate::callCreateProcess(QProcess::CreateProcessArguments *cpargs)
{
if (modifyCreateProcessArgs)
modifyCreateProcessArgs(cpargs);
bool success = CreateProcess(cpargs->applicationName, cpargs->arguments,
cpargs->processAttributes, cpargs->threadAttributes,
cpargs->inheritHandles, cpargs->flags, cpargs->environment,
cpargs->currentDirectory, cpargs->startupInfo,
cpargs->processInformation);
if (stdinChannel.pipe[0] != INVALID_Q_PIPE) {
CloseHandle(stdinChannel.pipe[0]);
stdinChannel.pipe[0] = INVALID_Q_PIPE;
}
if (stdoutChannel.pipe[1] != INVALID_Q_PIPE) {
CloseHandle(stdoutChannel.pipe[1]);
stdoutChannel.pipe[1] = INVALID_Q_PIPE;
}
if (stderrChannel.pipe[1] != INVALID_Q_PIPE) {
CloseHandle(stderrChannel.pipe[1]);
stderrChannel.pipe[1] = INVALID_Q_PIPE;
}
return success;
}
CreateProcess
接口,但是该调用是为了获取可执行文件的完整路径或相对于当前工作目录的路径。
qgetenv
与 qputenv
设置。