fix: arg[0] should be program exe
QProcess::arguments do not contain arg[0]. Signed-off-by: black-desk <me@black-desk.cn>
This commit is contained in:
parent
c043b392c7
commit
8be4c11b1c
@ -467,14 +467,16 @@ bool StartManager::launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp
|
|||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
envs.insert("GIO_LAUNCHED_DESKTOP_FILE_PID", QByteArray::number(getpid()).constData());
|
envs.insert("GIO_LAUNCHED_DESKTOP_FILE_PID", QByteArray::number(getpid()).constData());
|
||||||
auto argList = process.arguments();
|
auto argList = process.arguments();
|
||||||
char const * args[argList.length() + 1];
|
char const * args[argList.length() + 2];
|
||||||
std::transform(argList.constBegin(), argList.constEnd(), args, [](const QString& str){
|
std::transform(argList.constBegin(), argList.constEnd(), args + 1, [](const QString& str){
|
||||||
auto byte = new QByteArray;
|
auto byte = new QByteArray;
|
||||||
*byte = str.toUtf8();
|
*byte = str.toUtf8();
|
||||||
auto tmp_buf = byte->data();
|
auto tmp_buf = byte->data();
|
||||||
return tmp_buf;
|
return tmp_buf;
|
||||||
});
|
});
|
||||||
args[process.arguments().length()] = 0;
|
auto arg0 = process.program().toLocal8Bit();
|
||||||
|
args[0] = arg0.constData();
|
||||||
|
args[process.arguments().length() + 1] = 0;
|
||||||
auto envStringList = envs.toStringList();
|
auto envStringList = envs.toStringList();
|
||||||
char const * envs[envStringList.length() + 1];
|
char const * envs[envStringList.length() + 1];
|
||||||
std::transform(envStringList.constBegin(), envStringList.constEnd(), envs, [](const QString& str){
|
std::transform(envStringList.constBegin(), envStringList.constEnd(), envs, [](const QString& str){
|
||||||
@ -484,7 +486,7 @@ bool StartManager::launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp
|
|||||||
return tmp_buf;
|
return tmp_buf;
|
||||||
});
|
});
|
||||||
envs[envStringList.length()] = 0;
|
envs[envStringList.length()] = 0;
|
||||||
execvpe(process.program().toLocal8Bit().constData(), (char**)args, (char**)envs);
|
execvpe(arg0.constData(), (char**)args, (char**)envs);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
} else {
|
} else {
|
||||||
if (useProxy) {
|
if (useProxy) {
|
||||||
|
Loading…
Reference in New Issue
Block a user