Запустите исполняемый файл из того же каталога, что и приложение Qt, когда в пути есть пробелы.

Я хотел бы запустить исполняемый файл при нажатии кнопки в моем приложении Qt. Этот .exe всегда находится в том же каталоге, что и само приложение Qt.

Иногда в пути к этому каталогу встречаются пробелы. Кажется, это предотвращает запуск .exe.

Вот мой код (похоже, он не работает):

QString path = QCoreApplication::applicationDirPath ();
path.append("/executable.exe");

QProcess process;
process.execute(path);

Я не знаю, можно ли запустить .exe без предварительного отображения командной строки. Когда работает .exe, мне приходится закрывать приложение Qt, а .exe продолжает работать.


person OO-SKY    schedule 14.05.2012    source источник
comment
Вы имели в виду process.execute(path), верно?   -  person Spidey    schedule 14.05.2012
comment
Да, я изменил пост.   -  person OO-SKY    schedule 14.05.2012
comment
@OO-SKY: Интересно, что еще в посте отличается от вашего кода...   -  person PlasmaHH    schedule 14.05.2012
comment
@PlasmaHH: это точно мой код. Но я думаю, что мои тесты с system(path) не удались из-за пробелов в пути. process.execute(path) не работает даже без пробелов.   -  person OO-SKY    schedule 14.05.2012
comment
используйте QProcess::startDetached() для создания нового процесса, который не закроется при выходе из порождающего приложения   -  person Kamil Klimek    schedule 14.05.2012


Ответы (1)


execute(QString) использует одну строку как для пути к исполняемому файлу, так и для аргументов. Без правильного заключения в кавычки C:\A path with spaces\foo.exe будет интерпретироваться как c:\A как исполняемый файл и path, with spaces\foo.exe как аргументы.

Чтобы избежать этого, используйте перегрузку execute(QString, QStringList), которая принимает аргументы как отдельный список строк, даже если вы вообще не хотите передавать аргументы:

QProcess::execute(path, QStringList());

Это правильно и не требует цитирования с вашей стороны.

person Frank Osterfeld    schedule 14.05.2012
comment
Спасибо, это ответ на проблему с пробелами. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что это работает с каждым приложением, кроме моего исполняемого файла (который является установщиком NSIS). Может ли это быть из-за необходимых прав администратора? - person OO-SKY; 14.05.2012