Вверх ↑
Этот топик читают: Гость
Ответов: 49
Рейтинг: 10
#1: 2011-06-01 13:41:10 ЛС | профиль | цитата
Работая с компонентом WinExec заметил, что, в RunEvent функции Async не выполняется или выполняется некорректно, а т.е пока выполняется процесс запуска программы с помощью WinExec, программа не отвечает, а следовательно находиться в режиме ожидания.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#2: 2011-06-01 13:57:14 ЛС | профиль | цитата
MireX писал(а):
выполняется процесс запуска программы


Пожалуйста, выражайтесь точнее. Процесс запуска программы может занимать доли секунды, а может - минуты. Работа программы вообще не ограничена по максимуму по очевидным причинам. Так что такое "процесс запуска", работа дочерней программы, или этап загрузки?

Неоднократно запускал приложения этим компонентом в асинхронном режиме, родительский процесс ВСЕГДА получал управление обратно, после отработки API.

Если API долго не возвращает вам управление, запускайте из отдельного потока ваше дочернее приложение.
------------ Дoбавленo в 13.55:
Ах да, схема с примером на базе встроенных в Windows приложений у Вас часом не завалялась, наглядно показывающая
MireX писал(а):
что, в RunEvent функции Async не выполняется или выполняется некорректно


------------ Дoбавленo в 13.57:
И уточните версии компонентов, среды конструктора, компилятор, который использовался и ОС, на которой проявляется проблема, права пользователя, под которым производился запуск.
карма: 1

1
Голосовали:MireX
Разработчик
Ответов: 26164
Рейтинг: 2127
#3: 2011-06-01 14:03:24 ЛС | профиль | цитата
А причем здесь "Ошибки в среде", когда это относится к конкретному пакету и от среды никак не зависит
------------ Дoбавленo в 14.03:
Перемещено
карма: 22

0
Ответов: 49
Рейтинг: 10
#4: 2011-06-01 14:43:12 ЛС | профиль | цитата
Мда нормального ответа нету, 1nd1g0 - вы сами не можете построить схему из одного компонента ? какой тут пример WinExec и запуск через него сторонеей программы.

1nd1g0 писал(а):
И уточните версии компонентов, среды конструктора, компилятор, который использовался и ОС, на которой проявляется проблема, права пользователя, под которым производился запуск.

Сборка HiAsm - последняя, компилятор - delphi, Windows 7, запускаеться с правами админа.

1nd1g0 писал(а):
Пожалуйста, выражайтесь точнее. Процесс запуска программы может занимать доли секунды, а может - минуты. Работа программы вообще не ограничена по максимуму по очевидным причинам. Так что такое "процесс запуска", работа дочерней программы, или этап загрузки?

Какая Вам разница сколько времени запускаеться программа ? В данном случае это не важно, это не вообще так как время запуска варьируеться исходя из многих факторов.

Я Вам объесняю что пока дочерняя программа запускаеться или выполняет свои функции - при помощи WinExec, программа с WinExec - не отвечает, а следовательно Async из RunEvent не выполнил свою функцию и немедленно не передал управление основной программе, а дождался выполнения дочерней. Он действовал как действовала бы функция Wait.
------------ Дoбавленo в 14.43:
В общем это явно особенность дочерней программы, если кто то захочет увидеть, то, что увидел я скачайте этот http://build.chromium.org/f/chromium/snapshots/Win/87454/mini_installer.exe файл, и запустите с помощью WinExec
карма: 0

0
Ответов: 3889
Рейтинг: 362
#5: 2011-06-01 14:53:11 ЛС | профиль | цитата
MireX писал(а):
вы сами не можете построить схему из одного компонента ?

Пардон, но это Вы не можете доказать наличие ошибки в WinExec. То, что кто-то настолько тормозной, что ставит заморозку на своего родителя, и повышает себе приоритет на время распаковки в память, не делает родителя виноватым. WinExec честно ждёт момента, когда сможет выставить размер окна запускаемой жертвы, а жертва занимает под сотню метров оперативки сперва, дважды распаковываясь и тормозя всю систему, т.ч. окно появляется через пол-года.
карма: 1

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#6: 2011-06-01 15:02:11 ЛС | профиль | цитата
MireX писал(а):
Я Вам объесняю что пока дочерняя программа запускаеться или выполняет свои функции - при помощи WinExec, программа с WinExec - не отвечает

Так и должно быть -- пока сторонняя прога не отдаст управления ОС, мы сигнала о запуске не получим. Но если надо срочно вернуть управление своему ПО, до сделать можно так

code_24242.txt
------------ Дoбавленo в 15.02:
1nd1g0 писал(а):
Пардон, но это Вы не можете доказать наличие ошибки в WinExec

Режим WinExec изначально не предполагал создания дополнительного потока для запуска чужого ПО именно в чистом асинхронном режиме, но это не является ошибкой, и никогда ею не было
карма: 22

0
файлы: 1code_24242.txt [678B] [185]
Ответов: 3889
Рейтинг: 362
#7: 2011-06-01 15:04:05 ЛС | профиль | цитата
Да можно ещё проще!

code_24243.txt
карма: 1

0
файлы: 1code_24243.txt [499B] [174]
Ответов: 49
Рейтинг: 10
#8: 2011-06-01 15:04:14 ЛС | профиль | цитата
Душевно благодарю вас за разъяснения. Просто мне не давало покая, ошибка ли компонента это, или дочернего софта.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#9: 2011-06-01 15:06:42 ЛС | профиль | цитата
Я же сказал, почему это происходит. Процесс наш ждёт отмашку от библиотеки, к которой обратился по API, а та, в свою очередь, ждёт окна чтобы передать ему сообщения на предмет желаемого размера.

Ну и кто виноват, что окно не появляется до второго пришествия? Обратите внимание на точку, к которой я подключился для запуска Вашего приложения, поймёте трюк
карма: 1

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#10: 2011-06-01 15:11:05 ЛС | профиль | цитата
1nd1g0 писал(а):
Да можно ещё проще!

Все правильно, запускаем приложение при помощи передачи команды 'open' запускному модулю Shell32.dll, сами ничего не делая
карма: 22

0
Ответов: 8930
Рейтинг: 823
#11: 2011-06-01 15:15:42 ЛС | профиль | цитата
nesco, какие бы программы я ни запускал в этих режимах, результат всегда одинаков, мой вывод -- режимы не отличаются
async.jpg
wait.jpg
карма: 19

0
файлы: 2wait.jpg [18.9KB] [396], async.jpg [17.3KB] [485]
Ответов: 1841
Рейтинг: 369
#12: 2011-06-01 15:26:46 ЛС | профиль | цитата
Леонид, у меня работает как и задумано...

Пример схемы:
code_24246.txt
------------ Дoбавленo в 15.26:
Win 7 (sp1x32)
Delphi 4,7 и FPC.
SVN: 244
карма: 1
0
файлы: 1code_24246.txt [386B] [167]
Ответов: 49
Рейтинг: 10
#13: 2011-06-01 19:09:08 ЛС | профиль | цитата
Сообщество, очень вам благодарен!
1nd1g0 - твой способ просто нерально гениален, все работает как надо и проще не куда было.

карма: 0

0
Ответов: 3889
Рейтинг: 362
#14: 2011-06-01 20:37:05 ЛС | профиль | цитата
MireX, «Всё следует упрощать до тех пор, пока это возможно, но не более того». (с) А.Эйнштейн
карма: 1

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)