![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
MrDmitry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 556 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Пишу не большую программку, программка в ходе своей работы, должна запустить внешнею утилиту(hldsupdatetool), дождаться её завершения и начать выполнять другие действия. То есть нужно чтоб код идущий после запуска внешнего приложения не выполнялся пока не будет завершено это приложение. В интернете полно всяких готовых решений, но в них куча ошибок, а те которые удалось исправить, не работают как нужно
Это сообщение отредактировал(а) MrDmitry - 11.3.2011, 02:01 |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Вообще-то CreateProcess вполне достаточна для решения сабжа. И во всемирной помойке достаточно примеров её использования. Что именно не получается?
Ну и "в них куча ошибок". Не верю. Это не в них куча ошибок, это ты используешь их неправильно. Ибо не понимаешь их. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Добавлено через 1 минуту и 13 секунд Да ладно. Сам пробовал все эти CreateProcess и прочие WinExec - ни разу не получилось. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Хм. Вот от вас не ожидал такого ответа. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Molodec |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 20.12.2010 Где: Украина Репутация: нет Всего: 1 |
В библиотеке JVCL находил компонент для запуска приложения. Может в нем есть и callback функция, которая выполняется при завершении работы приложения. Может здесь стоит "покапать"...
Удачи! |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
уже не раз на форуме давал этот код:
Используем так, на примере с распаковкой/упаковкой файлов с пом. программы winrar:
этот код проверен во всех виндах, начиная с 98, на 95 не проверялось |
||||
|
|||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Так я же не виноват, что не получилось. ![]() -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Боюсь виноват именно ты. Потому что CreateProcess работает как надо.
-------------------- Обижено школьников: 8 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Конечно, именно я, кто же ещё. ![]() ![]() ![]() Это сообщение отредактировал(а) Данкинг - 11.3.2011, 14:21 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Потому что ты не сумел завернуть шуруп отвёрткой и забил его молотком. Даже хуже.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Что хуже, если у меня пример проще некуда? Кроме Comobj никаких библиотек не требует, тучи непонятных простому смертному параметров, как я уже говорил, тоже не просит, занимает 3 строчки кода и работает стопроцентно верно? -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Во-первых совершенно не обязательно использовать ole для такой простой вещи, как запуск процесса. Во-вторых в CreateProcess все параметры понятны. Если они непонятны лично тебе, это не повод обобщать.
-------------------- Обижено школьников: 8 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Т.е. мой код менее понятен, чем значение параметров в CreateProcess? Это сообщение отредактировал(а) Данкинг - 11.3.2011, 17:34 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Твой код вполне понятен, но это гoвнoкод. Не нужно создавать ком-объект сервера сценариев чтобы запустить процесс. Нужно просто взять и запустить.
Это сообщение отредактировал(а) bems - 11.3.2011, 18:07 -------------------- Обижено школьников: 8 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Угу. Ваш хвалёный CreateProcess (для него, оказывается, ко всему прочему какие-то никому не нужные переменные надо задавать) у меня вообще не запустился, только что попробовал.
![]() ![]() Это сообщение отредактировал(а) Данкинг - 11.3.2011, 18:49 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
В процессе программирования нужны переменные, какой кошмар.
А то что он у тебя не запустился, так тут ключевая фраза "у тебя" -------------------- Обижено школьников: 8 |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Я на тебя посмотрю, когда WSH будет не установлен в системе, или ты будешь вызывать этот код в других условиях, когда добрая Delphi не вызовет за тебя OleInitialize. Отдельный привет именам с пробелами. Не говоря уже про то, что Run - аналог ShellExecute. Т.е. если файловой ассоциации нет, то фиг ты запустишь. Это сообщение отредактировал(а) CodeMonkey - 11.3.2011, 23:31 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Ещё в качестве флуда.
![]() ![]() ![]() Ага, нужны. Только тут дело в том, что объявлять их требуется для CreateProcess, но вот далее оные нигде не используются. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Несомненно, самое простое что я видел для закручивания шурупов - это молоток.
Продолжай в том же духе - так придём к светлому будущему, товарищ! -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
На фоксе этот код тоже отлично работает.
Если нет файловой ассоциации с .exe - значит, пора винду переустанавливать или же откатывать на момент установки. ![]()
Молотком шуруп куда сложнее забивать, нежели запустить программу с помощью моего кода. ![]() Добавлено @ 00:02 Тебе взаимный привет от двойных кавычек, обрамляющих путь к программе. ![]() Это сообщение отредактировал(а) Данкинг - 12.3.2011, 00:03 -------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Вы же сами упоминали про топик стартера. А где в его вопросе точное указание, что ему нужно просто запустить произвольный EXE-шник? Он же пишет свою программу не "для просто так"? И это явно не вариант shell'а, иначе зачем нужно дожидаться завершения работы запущенного приложения. Для меня из текста вопроса ясно, что автор в своей программе готовит какие-то данные для последующей обработки другой программой. Он должен дождаться завершения этой обработки, после чего должен продолжить свою работу уже имея готовый результат другой программы. А в этом случае ваш вариант плохо подходит. Точнее, совсем не подходит! Это сообщение отредактировал(а) northener - 12.3.2011, 04:51 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
И перестань смайлофажить, ты не в песочнице. -------------------- Обижено школьников: 8 |
|||
|
||||
Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
Почему мифических? Почему привлекать? Я спросил, как бы сделал он сам, ничего не говоря ни о ole, ни о createprocess. Да-да, только кроме меня и Акеллы кода никто не написал. Все только говорят, что это неправильно, но правильного кода никто не приводит. Мне одному кажется, что что-то не так? Не знаю, что такое "смайлофажить", видимо, что-то со смайликами связано. А разве смайлики можно употреблять только в песочнице? ![]()
Речь идёт о запуске утилиты. Ну, утилита может быть и .com, это сути не меняет. ![]()
Готовы результат получить, и что? Вот даже не знал - не гадал, что мой рабочий вариант, оказывается, плохо подходит. Теперь буду в курсе. Это сообщение отредактировал(а) Данкинг - 12.3.2011, 14:37 -------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
потому что это миф.
Походу да, тебе одному. Акелла показал в принципе правильный код, только с парочкой флагов, которые могут быть и не нужны, и нечего тут еще показывать. Тема скатилась, закрываю. -------------------- Обижено школьников: 8 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |