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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запуск внешнего приложения  (Прочитано 10455 раз)
@!!ex
Гость
« : Февраль 23, 2010, 13:51 »

Проблемы две:
1)
У меня есть целиком команда - это путь/имя к приложению + команды. Например:
svn add %1 --force
Выдирать команды в ручную очень не хочется... Можно ли как-то запустить приложение, чтобы команды QT сам разбил на части?

2)
Если грохнуть QProcess через который приложение было запущено, то приложение сразу завершается.
Как сделать, чтобы приложение продолжало жить после удаления QProcess? После закрытия моей программы?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Февраль 23, 2010, 13:58 »

>>1)...
>>Выдирать команды в ручную очень не хочется
не понял откуда выдирать

>>2)...
>>Как сделать, чтобы приложение продолжало жить после удаления QProcess? После закрытия моей программы?
посмотри bool QProcess::startDetached(...)static
Записан

Юра.
@!!ex
Гость
« Ответ #2 : Февраль 23, 2010, 14:39 »

startDetached -  кажется то, что нужно.

по поводу аргументов:
в start аргументы передаются в списке.
То есть примерно так:
QProcess::startDetached("svn",QStringList() <<"add"<<"%1"<<"--force");

А хотелось бы что-то типа:
QProcess::startDetached("svn","add %1 --force");
Записан
crossly
Гость
« Ответ #3 : Февраль 23, 2010, 14:55 »

а какая собственно говоря разница.... ??
Записан
@!!ex
Гость
« Ответ #4 : Февраль 23, 2010, 14:56 »

Разница в том, что у меня команда одной строкой и мне видимо придется ее вручную парсить и разбивать на отдельные команды. чего делать не хочется.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Февраль 23, 2010, 15:41 »

>>а какая собственно говоря разница.... ??
именно, вот например:
QString cmd = "svn" + " " + "add %1 --force";
QProcess::startDetached(cmd);

>> команда одной строкой и мне видимо придется ее вручную парсить и разбивать на отдельные команды
как команду на отдельные команды разбивать?
ты изъясняешься совершенно не понятно. Есть команда и есть её аргументы.
Записан

Юра.
@!!ex
Гость
« Ответ #6 : Февраль 23, 2010, 15:49 »

Конечно аргументы, а не команды. Просто применимо к svn это команды, вот о чем думал о том и написал.

В справке к QProcess.start написано так:
Note: Arguments that contain spaces are not passed to the process as separate arguments.

Мой английски подсказывает мне, что это означает что строка идет как один аргумент, независимо от наличия пробелов.
Я не прав?
Записан
@!!ex
Гость
« Ответ #7 : Февраль 23, 2010, 16:03 »

Ага. Вроде startDetached() нормально воспринимает аргументы в одну строку. Проглядел.
Спасибо.
Записан
@!!ex
Гость
« Ответ #8 : Февраль 24, 2010, 08:07 »

Еще вопрос:
Под виндой QProcess::startDetached("svn add");
ничего не делает. Запускает, только если прописать полный путь:
QProcess::startDetached("\"E:\Program Files\Subversion\bin\svn\" add");

Полный путь писать не хочется... Можно как-то научить его запускать по названию команды?

Если из командной строки запускать svn add то все нормально запускается.
Записан
hackoff
Гость
« Ответ #9 : Февраль 24, 2010, 09:03 »

аналогичная проблема возникала. Вызывал shutdown из system32. В итоге остановился на том, что определял каталог system32 через winApi, ну а дальше объединял полученный путь с shutdown.exe.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #10 : Февраль 24, 2010, 16:06 »

Цитировать
Полный путь писать не хочется... Можно как-то научить его запускать по названию команды?
Занести путь к выпоняемому файлу команды в PATH
Записан
@!!ex
Гость
« Ответ #11 : Февраль 24, 2010, 19:03 »

Я специально написал, что:
Цитировать
Если из командной строки запускать svn add то все нормально запускается.

Команда в PATH занесена.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #12 : Февраль 24, 2010, 19:50 »

Интересно это баг?
Тогда можно хранить полный путь к запускаемому файлу в настройках программы...
Записан
@!!ex
Гость
« Ответ #13 : Февраль 24, 2010, 21:03 »

Проблема в том, что пользователь моей программы не знает что такое SVN. Он даже не знает о его существовании.
Настройки приходят "сверху" от руководителя проектом. А пользователь тупо кликает на кнопки: получить материалы/отослать материалы
Руководитель знает что такое SVN, но путь конкретный у пользователя не знает...
В обычной ситуации это не проблема, т.к. сама система находит и запускает указанное приложение...
Я думаю сделать хинт: создавать shell script и уже его через QProcess запускать. Как я понимаю такой косяк только под виндой, так что под виндой делать через bat файл, во всех остальных ОС - обычным способом.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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