![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| V0LT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 16.6.2009 Репутация: 1 Всего: 2 |
Не поможете ли добрые люди с одним вопросом ... никак не могу добится что бы консоль выводила немедленно результат в переменную ...
Создаю поток и pipe, запускаю через CreateProcess консольное окно ... но увы на ReadFile виснет до конца выполнения приложения (при запуске его в консоле должно быть много букв и там прописываются проценты выполнения (как в UPX)) ... от ping проходят нормально частями а стороннее приложение хоть тресни ... P.S. Как я понимаю проблема с выводом консоли у которой изменяется текст какой то строки в некой позиции ... с консолью что выводит текст наподобии write/writeln таких проблем нет Это сообщение отредактировал(а) V0LT - 9.12.2009, 22:06 |
|||
|
||||
| sCreator |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 20.8.2009 Где: Московская област ь Репутация: нет Всего: 5 |
Тут недавно наткнулся, может поможет ( сам пока не пользовал ) ( автор в модуле не упомянут поэтому указать не могу )
|
|||
|
||||
| V0LT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 16.6.2009 Репутация: 1 Всего: 2 |
Не Работает
точнее работает но снова тупо ждёт конца выполнения
Это сообщение отредактировал(а) V0LT - 11.12.2009, 15:41 |
|||
|
||||
| sCreator |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 20.8.2009 Где: Московская област ь Репутация: нет Всего: 5 |
Пока несколько советов:
- в STARTUPINFO есть еще hStdError для вывода сообщений ошибок обычно он считается более быстрым выводом и поэтому возможно проценты выводятся через него. Попробуй для начала подсоединиться к нему вместо hStdOutput. Если получится, тогда уже можно пробовать и от туда и от туда, пока вычитал что ReadFile ждет до конца вывода или заполнения буфера - кстати можно попробовать буфер уменьшить. - можно попробовать сперва без Thread там вроде вставлены ProcessMessages а они только для основного процесса нужны. у тебя вывод из нити в мемо без синхронизации - не смертельно но как то я такое допустил и у меня была неприятность ( подробности непомню ) Интересно бы самому попробовать - если этот precomp без большого окружения работает выложи с каким нибуть pcf. Во всяком случае в случае удачи отпишись. ( случай интересный - авось когда и самому сгодится ). Ну а при неудачи естесно пиши, а я постараюсь у себя с эмулировать. Будут еще мысли сообщу. |
|||
|
||||
| V0LT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 16.6.2009 Репутация: 1 Всего: 2 |
- кстати можно попробовать буфер уменьшить (делал - 0 эффекта)
- можно попробовать сперва без Thread (делал - 0 эффекта) - у тебя вывод из нити в мемо без синхронизации (непринципиально - Method выполняется только после окончания работы precomp.exe) http://schnaader.info/precomp.html Прекомпрессия: precomp -slow image.zip На выходе имеем файл image.pcf - это и есть файл с разжатыми zLib-потоками, который, в отличие от оригинала image.zip, жмётся тем же севензипом на ура (в результате размер архива уменьшается на 5-30%). Обратная рекомпрессия: precomp -r image.pcf На выходе имеем файл image.zip, т.е. исходный оригинал. хочу брать процентики выполнения ... Возьмите любой большой zip архив (300 - 500 мб хватит) выполни precomp -slow arch.zip получится arch.pcf и вот с ним я работаю P.S. Знаю через какое место делается такое (что бы печатать в нужном месте консоли .. а читать видимо придется ещё извращённее сделать) Это сообщение отредактировал(а) V0LT - 11.12.2009, 19:49 |
|||
|
||||
| sCreator |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 20.8.2009 Где: Московская област ь Репутация: нет Всего: 5 |
Вчера вечером посидел над данным вопросом.
Пробовал и с precomp.exe и просто сделал тест:
Вот функция без блокировки ReadFile:
Но это не помогает. Как только к создаваемому процессу присоединяется pipe, вывод изи него становится буферизированным даже на экран. ( пробовал без скрытия консоли ) По идеи этот буфер назначается последним параметром в CreatePipe(inputPipe, outputPipe, @securityAttributes, 0) ( если 0 - задается системой ) - но мои попытки смены размера этого буфера положительных результатов не дали. Причем это не зависит от выдачи символов #8 для затирания процентов или вывода построчно, а зависит только от наполнения буфера pipe. Пробовал еще
Пока вижу 2 варианта для проб: - создавать NamedPipe. - работать с буфером консоли создаваемого процесса ( если это возможно ). Будет что новенькое - отпишусь. |
||||||
|
|||||||
| V0LT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 16.6.2009 Репутация: 1 Всего: 2 |
Спасибо Creator, всё тщетно ... сделал методом дзена
В IDA рассмотрел сия экзешник, пропатчил - проблема решена (Windows 7 в пролёте ... там сия метод не заработал) Это сообщение отредактировал(а) V0LT - 17.12.2009, 18:00 |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |