LINUX.ORG.RU

Qt не могу запустить программу

 ,


0

1

Всем привет!

Нынче стало модно запускать скрипты из бинарников. Вот и мне пришлось поддаться этой нехорошей моде. Требуется запустить файл из предыдущей директории в виндах (да, я знаю, что не по адресу, но адекватных винфаков для неадекватной системы в сети нет).

Кароч, прога не умеет запускать скрипт из предыдущей директории, но умеет из своей.

    QString program = "C:/Program Files/Git/bin/sh.exe";
    QStringList arguments;
    // I'm in C:/testApp/testApp
    arguments << "C:/testApp/test.sh";
    qDebug()<<arguments;
    p1.start(program, arguments);
    if (!p2.waitForFinished())
    {
        qDebug() << "2 failed:" << p2.errorString();
        //exit(1);
    }
    else
        remote=p2.readAll();
    qDebug()<<"Remote: "<<remote;

На выхлопе:

("C:/testApp/test.sh")
2 failed: "Unknown error"
Remote:  ""

★★

Последнее исправление: aido (всего исправлений: 2)

Ответ на: комментарий от RazrFalcon
("-c", "C:/testApp/check_update.sh")
2 failed: "Unknown error"
Remote:  ""
aido ★★
() автор топика

C:/Program Files

Что-то у меня сильные сомнения, что пробел здесь правильно обработался.

EXL ★★★★★
()

Возможно sh ожидает пути в своём формате, вроде /c/testApp/test.sh (можно запустить sh и проверить, есть ли там этот путь).

xaizek ★★★★★
()

Чето мне кажется пробел в этой строке QString program = «C:/Program Files/Git/bin/sh.exe»; нужно правильно «эскейпить». Так то это правильная строка, но при запиховывании на исполнение, уже будет ошибка.

I-Love-Microsoft ★★★★★
()

process.start(«C:/Program Files/Git/bin/sh.exe», QStringList() << "-c" << «C:/testApp/test.sh»);

If the process starts successfully, QProcess will emit started(); otherwise, errorOccurred() will be emitted.

x905 ★★★★★
()

А не, пардоньте: http://doc.qt.io/archives/qt-4.8/qprocess.html#start — в примерах таки эскейпят.

qDebug() << «2 failed:» << p2.errorString();
2 failed: «Unknown error»

Ну, типичный фреймворк на типичных крестах.

anonymous
()
Ответ на: комментарий от anonymous

Оно в cmd.exe возможно передаётся, а там экранирование нужно.

Но я не уверен, конечно. Это всё нужно тестировать.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Интересно автор темы код выложил - что за p1/p2? Если QProcess, то скорее на этом этапе оно еще не попадает «в среду sh». Значит, эскейпить пробелик надо. А выполнив что-то внутри sh там уже полный msys наступает.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от EXL

Я эту проблему как-то по-топорному пока решил, глубоко не разбираясь. Тупо создал еще одно приложение в той директории, где все работает нормально, чтобы не приходилось перезаписывать открытые кем-то файлы.

aido ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.