Название: Запуск приложения из QT и завершение работы Отправлено: Larrikin от Ноябрь 05, 2005, 20:01 Здравствуйте.
Нужно из приложения на QT вызвать программу и завершить работу. Хмм.. как то непонятно получилось. Вобщем нужно что то типа сишного execl("filename",""); Название: Запуск приложения из QT и завершение работы Отправлено: Larrikin от Ноябрь 05, 2005, 20:03 Да, кстати, если я вставляю в свою прогу execl("filename",""), то при выполнении программа вываливается в корку.
Название: Запуск приложения из QT и завершение работы Отправлено: Trolltux от Ноябрь 05, 2005, 21:36 См. класс QProcess.
Название: Запуск приложения из QT и завершение работы Отправлено: Larrikin от Ноябрь 05, 2005, 22:00 Цитата: "Trolltux" См. класс QProcess. QProcess prog; prog.start("myProg"); exit(0); так? То есть код моего приложения заместится myProg? Название: Запуск приложения из QT и завершение работы Отправлено: Trolltux от Ноябрь 05, 2005, 22:34 Читайте Assistant или man.
Там все расписано. Ничей код не будет меняться. Вызовется внешняя программа. QT4: QProcess proc; proc.start("программа", "аргументы"); QT3: QProcess proc; proc.addArgument("программа"); proc.addArgument("аргументы"); proc.start(); На счет третьего QT не уверен. Не бойтесь читать документацию. Там все на примерах расписано. ИМХО, у TrollTech самая грамотные доки. Название: Запуск приложения из QT и завершение работы Отправлено: Larrikin от Ноябрь 05, 2005, 22:40 Цитата: "Trolltux" Читайте Assistant или man. Там все расписано. Ничей код не будет меняться. Вызовется внешняя программа. QT4: QProcess proc; proc.start("программа", "аргументы"); QT3: QProcess proc; proc.addArgument("программа"); proc.addArgument("аргументы"); proc.start(); На счет третьего QT не уверен. Не бойтесь читать документацию. Там все на примерах расписано. ИМХО, у TrollTech самая грамотные доки. Понял, спасибо. Название: Запуск приложения из QT и завершение работы Отправлено: Sergeich от Ноябрь 06, 2005, 11:44 Как я понял, тебе надо запустить процесс из программы и тут же ее завершить и все это должно работать под Unix. Если ты работаешь с 4-кой тебе надо юзать QProcess::startDetached, чтобы запущенный процесс не завершился после завершения программы, под 3-кой придется писать это дело самому, лучше всего выдрать кусок кода для QProcess из сырцов 4-ки.
Название: Запуск приложения из QT и завершение работы Отправлено: Larrikin от Ноябрь 06, 2005, 12:17 Цитата: "Sergeich" Как я понял, тебе надо запустить процесс из программы и тут же ее завершить и все это должно работать под Unix. Если ты работаешь с 4-кой тебе надо юзать QProcess::startDetached, чтобы запущенный процесс не завершился после завершения программы, под 3-кой придется писать это дело самому, лучше всего выдрать кусок кода для QProcess из сырцов 4-ки. Спасибо большое, то что нужно Название: Запуск приложения из QT и завершение работы Отправлено: Фёдор от Июль 10, 2006, 15:35 Добрый день! Имею qt3 у себя в linux SUSE 9.2.
Плотно начал заниматься програмированием не очень давно. У меня возникла проблема. Моё оконное приложение может запускать, внешние файлы, их работа достаточно долгая. Выход с stderr и stdout идёт в отдельное поле textEdit. Иногда при выключенных приборах, получается так что запустив эту внешнюю программу, совершается долгая холостая работа(это можно видеть по stdout). И я сделал кнопочку, которая должна убивать процесс. Но тут и умер. QProcess *proc; Потом в SLOT отдельных связанных с кнопками я делал нечто вроде formPostControl::text() { proc=new QProcess(this); ......//вставлял сюда аргументы и т д делал нужные connect и приложение работало замечательно. } //а при переходе к SLOT убивающему процесс formPostControl::stopProc() { if(proc->isRunning()) { proc->tryTerminate(); QTimer::singleShot( 5000, proc, SLOT( kill() ) ); } else { textEditWorkingMess->setText(QString::fromLocal8Bit("Работающих процессов нет")) } } При компиляции проскакивает нормально. А при нажатии на кнопку в окне(заведомо зная что процесс щас не запущен) происходит вылет и говорится segmentation fault. Всё дело в proc->isRunning(). Что здесь неправильно? Я пробовал просто без if взять tryTerminate() и всё. При запущенном процессе оно его останавливает, а при отсутсвии запущенных процессов, вылетает моё окно. Название: Запуск приложения из QT и завершение работы Отправлено: Grigory от Июль 20, 2006, 14:58 у тебя proc==null
Название: Re: Запуск приложения из QT и завершение работы Отправлено: RankoR от Май 28, 2010, 23:17 Здравствуйте! Задача похожая - запустить приложение и завершить свою работу. Запускаемое приложение работает достаточно долго (тоже на Qt), поэтому используется запускающее в качестве посредника. Вот код запускающего приложения:
Код: int main(int argc, char *argv[]) В Windows все работает без проблем. В линуксе при запуске запускающего из консоли управление не возвращается до завершения запускаемого. Т.е. он выглядит примерно так: Код: ./start "start2 arg1 arg2" Собственно, как мне нужно переписать свой код, чтобы управление возвращалось моментально? P.S. Суть в том, что запускающее приложение стартуется из PHP функцией exec, которая должна сразу вернуть управление в скрипте, а запускаемое приложение - продолжить работу в бекграунде. Спасибо. Название: Re: Запуск приложения из QT и завершение работы Отправлено: RZX от Август 23, 2010, 14:02 Еще раз про QProcess в Windows...
Есть программа на Qt, которая управляет фильтрами в Outlook Express 6.0 (OE). Вопрос в том, что эта программа для применения параметров должна запускать OE и через некоторое время завершать его работу. Вот такая фишка: QProcess *outlookExpressProcess = new QProcess(this); outlookExpressProcess->start(...); outlookExpressProcess->waitForStarted(...); outlookExpressProcess->kill(); не прокатывает! Объясню почему: запуск OE можно произвести командой msimn.exe причем если "Пуск"->"Выполнить"->"c:\Program Files\Outlook Express\msimn.exe" - все прекрасно работает если "Пуск"->"Выполнить"->cmd.exe а в cmd записать: "c:\Program Files\Outlook Express\msimn.exe" OE вываливается с ошибкой! [offtop] Хотя какая ему разница????? calc, MS Word, MS Excel нормально запускаются и там, и там! А эта с*ка не хочет ни в какую! [/offtop] Так как outlookExpressProcess->start(...) аналогичен вызову в cmd - в программе ничего не происходит. Часть 1 вопроса: Может где-то я не прав? Однако если из этой же программы вызвать QDir::setCurrent("C:\\Program Files\\Outlook Express"); QProcess::startDetached("msimn.exe"); тоже замечательно все запускается! Часть 2 вопроса: Если запускать процесс через startDetached(), как завершить его через определенное время из запускающей программы? [offtop] Ну вот как например в Delphi: h:= openprocess(PROCESS_TERMINATE, false, PID) terminateprocess(h,0); [/offtop] Название: Re: Запуск приложения из QT и завершение работы Отправлено: crossly от Август 23, 2010, 14:31 Цитировать если "Пуск"->"Выполнить"->cmd.exe хотелось бы узнать с какой ошибкой...а в cmd записать: "c:\Program Files\Outlook Express\msimn.exe" OE вываливается с ошибкой! Название: Re: Запуск приложения из QT и завершение работы Отправлено: RZX от Август 23, 2010, 15:42 Н-да... Попробовал на другом компе (виртуальная машина с чистой WinXP SP2):
QDir::setCurrent("C:\\Program Files\\Outlook Express"); QProcess::startDetached("msimn.exe"); эти команды нормально запускают OE. QProcess *outlookExpressProcess = new QProcess(this); outlookExpressProcess->start(...); outlookExpressProcess->waitForStarted(...); outlookExpressProcess->kill(); если компилить вот с этим, то моя программа НЕ запускает OE, а вываливается с ошибкой (окно "Отправить отчет об ошибке?") На моей рабочей винде эти же (последние) команды вообще ничего не делают (в смысле просто визуально ничего не видно - никаких окон с ошибками). хотелось бы узнать с какой ошибкой... Оййй... видимо, это кони уже самого Outlook'а. Потому как в чистой винде если "Пуск"->"Выполнить"->cmd.exe а в cmd записать: "c:\Program Files\Outlook Express\msimn.exe" то OE нормально запускается. а так ошибки (наверное, это уже не суть важно): >> Не удается запустить программу Outlook Express. Приложению не удалось открыть банк сообщений Outlook Express. Возможно, компьютеру не хватает памяти или переполнен жесткий диск. Обратитесь в службу поддержки пользователей корпорации Майкрософт для получения помощи. (0x8007007E, 126) После нажатия Ok: >>Не удается запустить программу Outlook Express. Библиотека MSOE.dll не инициализируется. Возможные причины - неправильная установка приложения Outlook Express. Название: Re: Запуск приложения из QT и завершение работы Отправлено: RZX от Август 23, 2010, 16:24 Даже если просто оставить:
QProcess *outlookExpressProcess = new QProcess(this); outlookExpressProcess->setWorkingDirectory("C:\\Program Files\\Outlook Express"); outlookExpressProcess->start("msimn.exe"); при выполнении ничего не происходит - никаких ошибок, просто без реакции. Название: Re: Запуск приложения из QT и завершение работы Отправлено: crossly от Август 24, 2010, 10:13 может дело в окружении....
Название: Re: Запуск приложения из QT и завершение работы Отправлено: RZX от Август 24, 2010, 14:23 может дело в окружении.... Может быть, но хез что ему там надо.. В принципе в соседней ветке ответили: http://www.prog.org.ru/index.php?topic=11886.msg96076#new (http://www.prog.org.ru/index.php?topic=11886.msg96076#new) это можно грохнуть процесс, если запускать его через startDetached(). |