Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запустить bat-файл из моей программы? и еще хорошо бы узнать результат... 
:(
    Опции темы
Курсант
Дата 7.3.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Здравствуйте... Пытаюсь запустить из моей программы bat-файл... Bat нормальный, при запуске "мышкой" работает. Из программы - не запускается...
Подозреваю что проблема в том, что использовал CreateProcess, bat вроде как не совсем процесс... Ну, это для меня темный лес...

Еще нужно получить результат выполнения bat-ника... А именно, информацию о том, что он во-первых закончился, а во-вторых утилиты, прописанные в нем, сделали свое дело...

Пытался делать так:
Код

CreateProcess ("mingw\\bin\\makeexe.bat", NULL, NULL, NULL, FALSE, NULL, NULL. NULL, &cif, &pi);
WaitForSingleObject (pi.hProcess, 10000);


Но ничего не вышло... Пойду мучать CreateProcess с командами из bat'а... Если кто знает как решить эту проблему, подскажите плиз...
PM ICQ Skype   Вверх
volatile
Дата 8.3.2011, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 13
Всего: 85



Бат файл это не процесс, а типа скрипт для комманд интерпретера (cmd.exe).
Можно пойти разными путями.
1. Запустить cmd.exe через CreateProcess, а в параметрах запуска ваш батник.

2. Можно сделать проще:
system ("ваш бат файл");

в 1 случае можно получить код возврата, дождаться завершения, или не дожитаться, ну все как обчно с CreateProcess.
в 2 насчет кода возврата сомневаюсь, а завершения кажется будет ждать по-любому.

PM MAIL   Вверх
Курсант
Дата 8.3.2011, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Спасибо за совет... Меня вот что смущает - что не работает такой код....

Код

CreateProcess ("mingw\\bin\\gcc.exe -c -DBUILD_DLL model.c", NULL, NULL, NULL, FALSE, NULL, NULL. NULL, &cif, &pi);
WaitForSingleObject (pi.hProcess, 10000);
CreateProcess ("mingw\\bin\\gcc.exe -shared -o model.dll -Wl --out-implib, libstddll.a model.o", NULL, NULL, NULL, FALSE, NULL, NULL. NULL, &cif, &pi);
WaitForSingleObject (pi.hProcess, 10000);


Файл model.c находится в одной папке с gcc.exe, то есть в mingw\bin...
PM ICQ Skype   Вверх
xvr
Дата 8.3.2011, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



В таком разрезе проще запускать через system. А не работает скорее всего потому, что mingw\\bin\\gcc.exe не находится в PATH. Похоже вы забыли приписать букву диска. В вашем написании это относительный путь, а должен быть абсолютный

Добавлено через 54 секунды
PS. system возвращает код возврата (но в хитром виде - см. доку на system)

Добавлено через 2 минуты и 18 секунд
Цитата(Курсант @  8.3.2011,  10:26 Найти цитируемый пост)
Файл model.c находится в одной папке с gcc.exe, то есть в mingw\bin... 

Не будет работать - файл будет искаться в текущей директории, т.е. откуда вы стартовали свой CreateProcess (или system)

PM MAIL   Вверх
Курсант
Дата 8.3.2011, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



mingw\bin\gcc.exe находится внутри папки с моей программой, но возможно, нужно прописать в параметрах...

При запуске через system вроде все получается... Почти... То есть я вижу консольное окно, правда компиляция не выполняется, потому что надо поколдовать с директориями... Пока вожусь... Но хотелось бы разобраться с CreateProcess и WaitForSingleObject на этом примере, раз уж он не получается...

Пойду колдовать с директориями...
PM ICQ Skype   Вверх
Курсант
Дата 8.3.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



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

Добавлено через 6 минут и 51 секунду
Хммм... Чудно, но действительно заработала smile)) Просто на ура smile Всем спасибо smile Пойду разбираться с CreateProcess и WaitForSingleObject;
PM ICQ Skype   Вверх
xvr
Дата 8.3.2011, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Смотрите 2 первых параметра CreateProcess 
В частности, для bat файлов там написано -
Цитата

To run a batch file, you must start the command interpreter; set lpApplicationName to cmd.exe and set lpCommandLine to the following arguments: /c plus the name of the batch file.



Это сообщение отредактировал(а) xvr - 8.3.2011, 20:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.