From a232e4ec839a934f6fdb3a9e3b82a9136bf731e5 Mon Sep 17 00:00:00 2001 From: wh201906 Date: Thu, 11 Mar 2021 00:44:13 +0800 Subject: [PATCH] Fix #15 partially The path of the start script or the client can contain spaces now(on Windows) TODO: Test the issue on Linux and implement the fix if it's needed Support non-ASCII chars in the path --- ui/mainwindow.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index a3920af..f9388a4 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -123,15 +123,24 @@ void MainWindow::on_PM3_connectButton_clicked() if(envScriptPath.exists()) { qDebug() << envScriptPath.absoluteFilePath(); + // use the shell session to keep the environment then read it #ifdef Q_OS_WIN // cmd /c "">>nul && set - envSetProcess.start("cmd /c \"" + envScriptPath.absoluteFilePath() + "\">>nul && set"); + envSetProcess.start("cmd"); + envSetProcess.write(QString("\"" + envScriptPath.absoluteFilePath() + "\">>nul\r\n").toLatin1()); + envSetProcess.waitForReadyRead(10000); + envSetProcess.readAll(); + envSetProcess.write("set\r\n"); #else + // need implementation(or test if space works) // sh -c '. "">>/dev/null && env' envSetProcess.start("sh -c \' . \"" + envScriptPath.absoluteFilePath() + "\">>/dev/null && env"); #endif envSetProcess.waitForReadyRead(10000); - clientEnv = QString(envSetProcess.readAll()).split(QRegExp("[\r\n]"), QString::SkipEmptyParts); + QString test = QString(envSetProcess.readAll()); + clientEnv = test.split(QRegExp("[\r\n]{1,2}"), QString::SkipEmptyParts); + clientEnv.removeFirst(); + qDebug() << clientEnv; // qDebug() << "Get Env List" << clientEnv; } else @@ -152,7 +161,7 @@ void MainWindow::on_PM3_connectButton_clicked() else if(!keepClientActive) emit setSerialListener(false); - + envSetProcess.kill(); } void MainWindow::onPM3StateChanged(bool st, const QString& info)