| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Запуск внешнего приложения |
| Автор: Dom 25.3.2011, 19:57 | ||
| Задача такая. Запустить консольное приложение с набором параметров командной строки. Дождаться завершения. Запустить следующее консольное приложение и т.д. Пробовал ShellExecute, WinExec, CreateProcess - не получается. Вот есть такой код, процедура ExecAndWait позаимствована у http://forum.vingrad.ru/index.php?showtopic=324441&view=findpost&p=2312203
Формируется правильный CmdLine, но при вызове CreateProcess ничего не происходит, приложение не запускается, новые файлы не создаются. Если строку полученную в CmdLine скопировать и вставить вручную в командную строку, то все отрабатывает корректно. Т.е. проблема где-то в самом вызове. Подтолкните пожалуйста в нужное направление, ибо силы уже на исходе... Наверняка какую-то мелочь пропустил... |
| Автор: uwannadie 25.3.2011, 22:43 | ||
попробуй такой код:
у меня по-крайней мере запускалось без ошибок и отрабатывало несколько десятков тысяч раз за один запуск программы p.s. код может изначально и был от Акеллы, но найден в просторах тырнета, так что чесно хз чей |
| Автор: Dom 26.3.2011, 01:27 |
| Спасибо, но не помогло... Процесс как и прежде не запускается, по крайней мере я не вижу его в ProcessExplorer'е Будем думать дальше. |
| Автор: uwannadie 28.3.2011, 09:56 |
| а Вы уверены, что вообще дело доходит до запуска? |
| Автор: Данкинг 28.3.2011, 10:51 |
| Dom, http://forum.vingrad.ru/index.php?showtopic=324441&view=findpost&p=2312140 глянь-таки на мой пример. Вдруг он тебе поможет. В отличие от CreateProcess. |
| Автор: CodeMonkey 28.3.2011, 20:26 |
| Меня вот это смущает: '>' (это в командной строке). Выглядит очень подозрительно. Я сомневаюсь, что это параметр к программе. Это часом вы не перенаправление вывода сделать хотите? |
| Автор: uwannadie 29.3.2011, 11:24 | ||
кстати да, если перенаправление, то тут, увы, ничего не выйдет, ибо перенаправление вывода консоли умеет делать только сама консоль. для примера попробуйте скомпилировать это:
на диске D ничего не появится |
| Автор: CodeMonkey 29.3.2011, 11:32 |
Отчего же. Вполне выйдет. И даже несколькими способами. Например, через hStdOutput. Или вызовом через CMD. Но для начала надо точно уточнить, что автор темы хочет сделать. |
| Автор: uwannadie 29.3.2011, 12:18 |
имелся ввиду способ вышеописанными процедурами и функциями |
| Автор: CodeMonkey 29.3.2011, 13:11 | ||
| Непонятно, а что не так с вышеуказанными функциями? hStdOutput - это параметр у StartupInfo для CreateProcess. Берём и указываем. Или имелось ввиду без модификации кода выше? Ну, способ с hStdOutput без модификации - да, нельзя. Хотя в первом примере даже STARTF_USESTDHANDLES есть (но почему-то нет установки самих описателей. Кто это писал? Пристрелить на месте! Способ через CMD - вполне. Скажем:
|
| Автор: uwannadie 29.3.2011, 18:42 |
именно это и имелось ввиду. если Вы имелли ввиду то, что выкладывал я, то оно нарыто гуглом в просторах инета |