Доброе утро.
Проблема в том, что QProcess::startDetached()
- это статический метод, который создает процесс "забей и забудь".
Это означает, что вы не можете установить этот рабочий каталогпуть.Все, что вы можете сделать, это позвонить по номеру
QProcess::startDetached (const QString &program, const QStringList &arguments, const QString &workingDirectory);
Это, однако, оставляет проблему с записью в stdin недавно созданного процесса.Дело в том, что, поскольку у вас нет QProcess
объекта, вы ничего не можете записать в свой stdin.Может быть решение с использованием дескриптора процесса, предоставляемого статическим методом startDetached()
.
У нас была похожая проблема в нашей компании.Нам нужны отдельные процессы, которые выходят за рамки срока службы вызывающей программы и для которых мы можем установить среду.Это казалось невозможным, глядя на код Qt.
Мое решение состояло в том, чтобы использовать обертку вокруг QProcess
с ее собственным startDetached()
методом.Что он сделал, он фактически создал этот подкласс QProcess
в куче и использовал его обычный метод start()
.Однако в этом режиме сигнал, который срабатывает после завершения процесса, вызывает слот, который удаляет сам объект: delete this;
.Оно работает.Процесс выполняется независимо, и мы можем установить среду.
Таким образом, в принципе нет необходимости использовать метод отдельного запуска.Вы можете использовать обычный метод запуска, если ваш QProcess
является объектом в куче.И если вы заботитесь об утечках памяти в этом сценарии, вам придется предоставить механизм, аналогичный описанному выше.
С уважением
D