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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Пробелы в QProcess::start  (Прочитано 17340 раз)
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #15 : Июнь 11, 2012, 16:29 »

Вот пример запуска:

А зачем ты используешь нативное API для запуска процессов?
Потому что как-то борол-борол такую же проблему как топикстартер, и только так и поборол.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #16 : Июнь 11, 2012, 16:34 »

Потому что как-то борол-борол такую же проблему как топикстартер, и только так и поборол.

Эти проблемы решаются через использование
Цитировать
QProcess::execute ( const QString & program, const QStringList & arguments )
, там ничего экранировать не нужно
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #17 : Июнь 11, 2012, 17:00 »

Эти проблемы решаются через использование
Цитировать
QProcess::execute ( const QString & program, const QStringList & arguments )
, там ничего экранировать не нужно
Если бы все было так гладко, этого топика не было бы.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #18 : Июнь 11, 2012, 17:09 »

Если бы все было так гладко, этого топика не было бы.

Выложи программу (ТС тоже), с которой это не работает. Я проверял и с бинарниками и с батниками, всё работает. Для особо запущенных случаев Hellraiser дал 100% совместимый с cmd вариант.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #19 : Июнь 11, 2012, 17:27 »

Выложи программу (ТС тоже), с которой это не работает. Я проверял и с бинарниками и с батниками, всё работает. Для особо запущенных случаев Hellraiser дал 100% совместимый с cmd вариант.
Я боролся с 1С7.7, у ТС, похоже что 1С8.2  .
сейчас под рукой нет инсталляшки.
Записан
andrew.k
Гость
« Ответ #20 : Июнь 11, 2012, 19:24 »

Кавычки не нужны.
Если бы аргументы передавались одной строкой, то да кавычки нужны. Но они нужны не исполняемой программе, а интерпретатору выполняющему запуск, чтобы корректно передать параметры.
А тут аргументы передаются как список строк, поэтому проблемы с пробелом быть не должно.
Не знаю где "тут", неск дней назад решал проблемы для Вындоуз приложения которое использовало GetCommandLine ф-цию API, ну и пришлось кавычки разбирать руками
"Тут" - это в обсуждаемом QProcess.
И при чем тут API функции не ясно.
И тем более ясно, что если функция возвращает командную строку целиком, то без кавычек не обойтись, я об этом и написал.
Вот в QProcess таких проблем быть не может.
Записан
Dastes
Гость
« Ответ #21 : Июнь 11, 2012, 19:49 »

Да, 1с 8.2
Кое как получилось с System(), но в пути к exe нельзя использовать пробелы, Program Files заменяются сокращенными именами, и если будет нестандартный путь установки с пробелами, то капец. И еще выскакивает на пол секунды черное окно консоли, а в start() его нет.

Если есть желание поковыряться, то вот ссылка на 1с. (~130мб, требуется минутная регистрация). Или где-нибудь на торрентах.
http://1c-dn.com/downloads/index.php?SECTION_ID=56
Записан
andrew.k
Гость
« Ответ #22 : Июнь 11, 2012, 19:56 »

Да, 1с 8.2
Кое как получилось с System(), но в пути к exe нельзя использовать пробелы, Program Files заменяются сокращенными именами, и если будет нестандартный путь установки с пробелами, то капец. И еще выскакивает на пол секунды черное окно консоли, а в start() его нет.

Если есть желание поковыряться, то вот ссылка на 1с. (~130мб, требуется минутная регистрация). Или где-нибудь на торрентах.
http://1c-dn.com/downloads/index.php?SECTION_ID=56
Ты пробовал запускать эту программу из командной строки, так как тебе нужно (с пробелами и кавычками)?
Нормально ли она при этом отрабатывает? Думаю нет.
Записан
Dastes
Гость
« Ответ #23 : Июнь 11, 2012, 20:10 »

бат файл отрабатывает отлично
Код:
"F:\Program Files\1cv82\common\1cestart.exe" DESIGNER /F"E:\test" /DumpIB"E:\test\dfsd2 gffgh 1.dt" /N"asd" /P"123"
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #24 : Июнь 11, 2012, 21:00 »

Попробуй вот так

Код
C++ (Qt)
bool ok = QProcess::startDetached(
   "F:\Program Files\1cv82\common\1cestart.exe",
   QStringList()
   << "DESIGNER"
   << "/F"
   << "E:\test"
   << "/DumpIB"
   << "E:\test\dfsd2 gffgh 1.dt"
   << "/N"
   << "asd"
   << "/P"
   << "123"
);
 
qDebug("Started: %d", ok);
 
Записан
Dastes
Гость
« Ответ #25 : Июнь 11, 2012, 21:13 »

Процесс не запустился.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #26 : Июнь 11, 2012, 21:21 »

запусти через QProcess::start() и отлови stdout/stderr, статус выхода, код возврата, и скопируй сюда код и все эти логи. Теоретически я могу предположить, что 1с не поддерживает раздельные параметры, то есть принимает только
Код:
/N"1 2"
но не
Код:
/N "1 2"
, что будет весьма оригинальным с их стороны.
Записан
Dastes
Гость
« Ответ #27 : Июнь 11, 2012, 21:44 »

Не соображу как логи вывести.

Вот такое выдается предупреждение:
Цитировать
..\testbat\main.cpp:62: warning: unknown escape sequence '\P'
..\testbat\main.cpp:62: warning: unknown escape sequence '\c'
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #28 : Июнь 11, 2012, 21:51 »

Не соображу как логи вывести.

Вот такое выдается предупреждение:
Цитировать
..\testbat\main.cpp:62: warning: unknown escape sequence '\P'
..\testbat\main.cpp:62: warning: unknown escape sequence '\c'
Обратную косую надо экранировать!
путь c:\Program Files\1c\bin надо записать как "\"c:\\Program Files\\1c\\bin\""
Записан
andrew.k
Гость
« Ответ #29 : Июнь 11, 2012, 22:10 »

Не соображу как логи вывести.

Вот такое выдается предупреждение:
Цитировать
..\testbat\main.cpp:62: warning: unknown escape sequence '\P'
..\testbat\main.cpp:62: warning: unknown escape sequence '\c'
Обратную косую надо экранировать!
путь c:\Program Files\1c\bin надо записать как "\"c:\\Program Files\\1c\\bin\""


Лучше прямые слеши использовать.

Одно из этого должно правильно передавать параметры (параметры произвольные для примера):
Код
C++ (Qt)
start("F:/Program Files/1cv82/common/1cestart.exe",
   QStringList() << "/F"  << "E:/test/dfsd2 gffgh 1.test");

Код
C++ (Qt)
start("F:/Program Files/1cv82/common/1cestart.exe",
   QStringList() << "/FE:/test/dfsd2 gffgh 1.test");

Если это не работает, значит виноват 1cestart и ничего тут не сделаешь.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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