| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Запуск внешнего приложения |
| Автор: MrDmitry 11.3.2011, 01:59 |
| Пишу не большую программку, программка в ходе своей работы, должна запустить внешнею утилиту(hldsupdatetool), дождаться её завершения и начать выполнять другие действия. То есть нужно чтоб код идущий после запуска внешнего приложения не выполнялся пока не будет завершено это приложение. В интернете полно всяких готовых решений, но в них куча ошибок, а те которые удалось исправить, не работают как нужно |
| Автор: northener 11.3.2011, 02:45 |
| Вообще-то CreateProcess вполне достаточна для решения сабжа. И во всемирной помойке достаточно примеров её использования. Что именно не получается? Ну и "в них куча ошибок". Не верю. Это не в них куча ошибок, это ты используешь их неправильно. Ибо не понимаешь их. |
| Автор: Данкинг 11.3.2011, 02:54 | ||
Добавлено через 1 минуту и 13 секунд Да ладно. Сам пробовал все эти CreateProcess и прочие WinExec - ни разу не получилось. |
| Автор: northener 11.3.2011, 06:48 | ||
Хм. Вот от вас не ожидал такого ответа. |
| Автор: Molodec 11.3.2011, 09:55 |
| В библиотеке JVCL находил компонент для запуска приложения. Может в нем есть и callback функция, которая выполняется при завершении работы приложения. Может здесь стоит "покапать"... Удачи! |
| Автор: Akella 11.3.2011, 09:57 | ||||
уже не раз на форуме давал этот код:
Используем так, на примере с распаковкой/упаковкой файлов с пом. программы winrar:
этот код проверен во всех виндах, начиная с 98, на 95 не проверялось |
| Автор: Данкинг 11.3.2011, 10:29 |
Так я же не виноват, что не получилось. |
| Автор: bems 11.3.2011, 14:16 |
| Боюсь виноват именно ты. Потому что CreateProcess работает как надо. |
| Автор: Данкинг 11.3.2011, 14:20 |
Конечно, именно я, кто же ещё. |
| Автор: CodeMonkey 11.3.2011, 14:26 |
| Потому что ты не сумел завернуть шуруп отвёрткой и забил его молотком. Даже хуже. |
| Автор: bems 11.3.2011, 16:36 |
| Во-первых совершенно не обязательно использовать ole для такой простой вещи, как запуск процесса. Во-вторых в CreateProcess все параметры понятны. Если они непонятны лично тебе, это не повод обобщать. |
| Автор: Данкинг 11.3.2011, 17:34 |
Т.е. мой код менее понятен, чем значение параметров в CreateProcess? |
| Автор: bems 11.3.2011, 18:04 |
| Твой код вполне понятен, но это гoвнoкод. Не нужно создавать ком-объект сервера сценариев чтобы запустить процесс. Нужно просто взять и запустить. |
| Автор: Данкинг 11.3.2011, 18:48 |
| Угу. Ваш хвалёный CreateProcess (для него, оказывается, ко всему прочему какие-то никому не нужные переменные надо задавать) у меня вообще не запустился, только что попробовал. |
| Автор: bems 11.3.2011, 21:42 |
| В процессе программирования нужны переменные, какой кошмар. А то что он у тебя не запустился, так тут ключевая фраза "у тебя" |
| Автор: CodeMonkey 11.3.2011, 23:30 | ||
Я на тебя посмотрю, когда WSH будет не установлен в системе, или ты будешь вызывать этот код в других условиях, когда добрая Delphi не вызовет за тебя OleInitialize. Отдельный привет именам с пробелами. Не говоря уже про то, что Run - аналог ShellExecute. Т.е. если файловой ассоциации нет, то фиг ты запустишь. |
| Автор: Данкинг 11.3.2011, 23:34 |
| Ещё в качестве флуда. Ага, нужны. Только тут дело в том, что объявлять их требуется для CreateProcess, но вот далее оные нигде не используются. |
| Автор: CodeMonkey 11.3.2011, 23:36 |
| Несомненно, самое простое что я видел для закручивания шурупов - это молоток. Продолжай в том же духе - так придём к светлому будущему, товарищ! |
| Автор: Данкинг 11.3.2011, 23:59 | ||||
На фоксе этот код тоже отлично работает.
Если нет файловой ассоциации с .exe - значит, пора винду переустанавливать или же откатывать на момент установки.
Молотком шуруп куда сложнее забивать, нежели запустить программу с помощью моего кода. Добавлено @ 00:02 Тебе взаимный привет от двойных кавычек, обрамляющих путь к программе. |
| Автор: northener 12.3.2011, 02:01 | ||
Вы же сами упоминали про топик стартера. А где в его вопросе точное указание, что ему нужно просто запустить произвольный EXE-шник? Он же пишет свою программу не "для просто так"? И это явно не вариант shell'а, иначе зачем нужно дожидаться завершения работы запущенного приложения. Для меня из текста вопроса ясно, что автор в своей программе готовит какие-то данные для последующей обработки другой программой. Он должен дождаться завершения этой обработки, после чего должен продолжить свою работу уже имея готовый результат другой программы. А в этом случае ваш вариант плохо подходит. Точнее, совсем не подходит! |
| Автор: bems 12.3.2011, 09:24 | ||
И перестань смайлофажить, ты не в песочнице. |
| Автор: Данкинг 12.3.2011, 14:35 | ||||
Почему мифических? Почему привлекать? Я спросил, как бы сделал он сам, ничего не говоря ни о ole, ни о createprocess. Да-да, только кроме меня и Акеллы кода никто не написал. Все только говорят, что это неправильно, но правильного кода никто не приводит. Мне одному кажется, что что-то не так? Не знаю, что такое "смайлофажить", видимо, что-то со смайликами связано. А разве смайлики можно употреблять только в песочнице?
Речь идёт о запуске утилиты. Ну, утилита может быть и .com, это сути не меняет.
Готовы результат получить, и что? Вот даже не знал - не гадал, что мой рабочий вариант, оказывается, плохо подходит. Теперь буду в курсе. |
| Автор: bems 12.3.2011, 17:48 | ||
потому что это миф.
Тема скатилась, закрываю. |