Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ не стартует процесс в Qt5

Автор: tradmir@mail.ru 20.12.2017, 19:15

Уважаемые знатоки!

хочу запустить из программы две команды командного окна и получить результат. В qt4 все работает, а qt5 не стартует второй процесс.
процесс 1 запускает команду:
process1.start("myecho.exe сабака");
если процесс1 стартовал и/или выполняется, то ожидается финиш процесса 1 и вызвается процесс 2
if (process1.state()==QProcess::Starting || process1.state()==QProcess::Running){
if (process1.waitForFinished()){

process2.start(cmd2);
далее проверяется состояние процесса 2, оказывается, состояние процесса есть Not running

Сборка собранная под Qt5 в операционной системе Windows XP(32 bit) работает на Windows XP(32 bit),
та же сборка собранная под Qt5 в операционной системе Windows XP(32 bit) не работает на Windows 7.

Подскажите в чем проблема?

С уважением,
Радмир

Автор: Алексей1153 21.12.2017, 7:39

tradmir@mail.ru,
попробуй сначала дождаться, когда первый процесс запустится

bool QProcess::waitForStarted(int msecs)

Автор: tradmir@mail.ru 22.12.2017, 19:09

Цитата(Алексей1153 @ 21.12.2017, 8:39) *
tradmir@mail.ru,
попробуй сначала дождаться, когда первый процесс запустится

bool QProcess::waitForStarted(int msecs)

Программа запускает первую команду, дожидается старта или состояния "исполняется" ,
дожидается состояния финишировала и стартует процесс2.
Процесс2 не стартует.

Похоже нужно ставить Qt5 полностью на Windows 7, хотел обойтись только пакетом зависимых dll.
Поставлю, результат сообщу.

Радмир

Автор: Алексей1153 23.12.2017, 10:14

tradmir@mail.ru, обычно копирования dll достаточно, не требуется установка всего Qt. Там что-то другое

Автор: tradmir@mail.ru 29.12.2017, 18:49

Цитата(Алексей1153 @ 23.12.2017, 10:14) *
tradmir@mail.ru, обычно копирования dll достаточно, не требуется установка всего Qt. Там что-то другое


Да нет, просто малоизвестная фича от Qt, а именно:
Под Windows XP процесс запускается, если вы укажете рабочую директорию, типа process1.setWorkingDirectory("c:/..."),
а под Windows 7 нужно больше: QDir::setCurrent("c:/...").

Как обычно, чем больше знаешь, тем больше граница между тем, что знаешь и не знаешь.

Вопрос закрыт,
всем спасибо.

С уважением,
Радмир

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)