Russian Qt Forum
Ноябрь 22, 2024, 16:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QProcess. Приложение крашится после запуска (Crashed, CrashExit)  (Прочитано 5709 раз)
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« : Февраль 04, 2017, 20:04 »

Приветствую всех.
Имеется консольное приложение собранное из исходников. В консоле через cmd запускается, работает хорошо. Запускаю через QProcess - крашится.
Отловит все сигналы что нашёл, результат:

Код:
stateChanged():  QProcess::ProcessState(Starting)
stateChanged():  QProcess::ProcessState(Running)
started()
errorOccurred():  QProcess::ProcessError(Crashed)
stateChanged():  QProcess::ProcessState(NotRunning)
finished():  -1073741515 QProcess::ExitStatus(CrashExit)

Подскажите пожалуйста, как можно понять хотябы почему оно крашится?


Код:
#include "work.h"
#include <QDebug>
#include <QTextStream>

Work::Work()
{
    myProcess = new QProcess();
    connect(myProcess, SIGNAL(started()), this, SLOT(started()));
    connect(myProcess, SIGNAL(errorOccurred(QProcess::ProcessError)), this, SLOT(errorOccurred(QProcess::ProcessError)));
    connect(myProcess, SIGNAL(readyReadStandardError()), this, SLOT(readyReadStandardError()));
    connect(myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readStandardOutput()));
    connect(myProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(finished(int, QProcess::ExitStatus)));
    connect(myProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(stateChanged(QProcess::ProcessState)));
    createProcess1();
}

void Work::createProcess1()
{
    QString program = "d:\\opt\\ms\\bin\\ms.exe --version";

    myProcess->start(program);

    myProcess->waitForStarted(3000);
    myProcess->waitForReadyRead(3000);
    myProcess->waitForFinished(100);
}

void Work::finished(int exitCode, QProcess::ExitStatus exitStatus)
{
    qDebug() << "finished(): " << exitCode << exitStatus;
}

void Work::readStandardOutput()
{
    qDebug() << "readStandardOutput(): " << myProcess->readAllStandardOutput();
}

void Work::readyReadStandardError()
{
    qDebug() << "readyReadStandardError(): " << myProcess->errorString();
}

// http://doc.crossplatform.ru/qt/4.7.x/qprocess.html
void Work::errorOccurred(QProcess::ProcessError error)
{
    qDebug() << "errorOccurred(): " << error;
}

void Work::started()
{
    qDebug() << "started()";
}

void Work::stateChanged(QProcess::ProcessState newState)
{
    qDebug() << "stateChanged(): " << newState;
}
« Последнее редактирование: Февраль 05, 2017, 13:28 от vebmaster » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Февраль 04, 2017, 20:50 »

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

еще попробуй запустить его без параметра --version или передать этот параметр через второй параметр метода QProcess ::start()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« Ответ #2 : Февраль 04, 2017, 23:03 »

можно добавить отладочный вывод, чтобы понять где именно падает.
подскажите как это можно сделать, приложение написано на с++

параметр не причём, запускал и без параметра, тоже самое
Записан
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« Ответ #3 : Февраль 05, 2017, 13:27 »

Проблему решил путём сборки запускаемого приложение в этой же операционной системе в которой и работаю. В проблемном случае приложение собиралось в другой.
Моя текущая windows 10. Собирал в Windows xp.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Февраль 05, 2017, 14:24 »

то есть приложение, собранное в ХР, спокойно запускалось в консоли 10-ки, но при запуске через QProcess падало?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
vebmaster
Новичок

Offline Offline

Сообщений: 47


Просмотр профиля
« Ответ #5 : Февраль 06, 2017, 12:00 »

то есть приложение, собранное в ХР, спокойно запускалось в консоли 10-ки, но при запуске через QProcess падало?
да
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.