| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Ресурсы |
| Автор: Kirgston 17.1.2009, 14:22 |
| Всем доброго времени суток! Подскажите пожалуйста как я могу впихнуть в ресурсы и загрузить от туда ЕХЕ? Ну например как впихнуть я знаю, как загрузить ехе знаю, а мне надо какбы грузить ехе из ресурсов. Как это можно сделать? Зарание очень благодарен |
| Автор: THandle 17.1.2009, 16:15 |
| Kirgston, посмотри эту тему: http://forum.vingrad.ru/forum/topic-242454/unread-1/hl/exe++%25D1%2580%25D0%25B5%25D1%2581%25D1%2583%25D1%2580%25D1%2581%2A%25D0%25AB/index.html Или тебе нужно запустить не создавая временного файла на диске? |
| Автор: Kirgston 17.1.2009, 21:25 |
| Да именно без временного. У какбы ... также как и картинки грузят с ресурсов, мне также и надо запустить ехе с ресурсов |
| Автор: THandle 17.1.2009, 21:37 |
| Kirgston, глянь вот эту тему: http://forum.vingrad.ru/topic-206695.html |
| Автор: Kirgston 18.1.2009, 15:57 | ||
Спасибо большое!
Но вот не понимаю... с самого начала идет функция. Потом опять какойто кусок без названия вобще... как вызвать? Что оно делает за процесс? И что за библиотека rxtypes ? Зарание ОЧЕНЬ благодарен!!! |
| Автор: CodeMonkey 18.1.2009, 16:04 |
| ...и охота вам проблемы себе на пустом месте создавать... |
| Автор: Kirgston 18.1.2009, 16:38 |
| Почему на прямом месте? =) мне просто надо именно это сделать. Защита |
| Автор: Kirgston 18.1.2009, 21:24 |
| Подскажите пожалуйста |
| Автор: THandle 18.1.2009, 22:38 |
| Kirgston, послушай лучше CodeMonkey. Что нужно чтобы загрузить EXE из памяти? ИМХО, нужно записать в новый процесс данные из загружаемого EXE? А что это за EXE? Это самый обычный PE файл. Нужно знать его структуру, как вообще сделать загрузчик... Лучше не связываться с этим Сейчас, после изучения кода по данной мной же(сорри за это) ссылке понятно что тот код - просто огрызок, и я не думаю что он будет правильно работать. Если интересно посмотреть про PE то глянь, например это: http://rsdn.ru/?article/?baseserv/pe_coff.xml http://www.rsdn.ru/article/baseserv/peloader.xml http://www.wasm.ru/publist.php?list=1 (внизу страницы) Придумай для этого что нибудь другое |
| Автор: Kirgston 18.1.2009, 23:55 |
| Ну хорошо. А как дела с временным файлом? Мне например надо чтобы он работал как из той папки где моя программа, а не обращатся к нему например какбудто он лежит в С:\Temp\... |
| Автор: THandle 19.1.2009, 00:44 | ||
| Kirgston, ну так извлекай к себе в папку. Как нить так сделай
|
| Автор: Kirgston 19.1.2009, 09:25 |
| Ну да я понимаю, но подскажите пожалуйста результат? Файл будет виден? Что с ним можно сделать? Это тоже что и Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName); Res.Free; ? Насколько я вижу что тут создается как бы... ну файл и сразу запускается. А что дальше? =) Просто я ещё не так силен в делфи как вы. Зарание большое спасибо!!! |
| Автор: Kirgston 19.1.2009, 13:00 |
| Ну смотрите. У меня итак файл в ресурсах и стоит обработчик события если его закроют то чтобы он сразу удалился с харда =) Но мне бы хотелось чтобы он вобще там не появлялся =) думал может есть просто какбы ShellExecute (и тут указать ссылку на внутренний рессурс и всё). |
| Автор: THandle 19.1.2009, 13:11 | ||
Kirgston, у тебя есть PI.hProcess. Можно дождаться его завершения. В самом грубом виде выглядело бы так, но это твою программу подвесит
|
| Автор: Kirgston 19.1.2009, 13:47 |
| Хммм а если просто? Сканировать еее на сколько я понял Диспетчер задач ))))) ну сканировать запущенные программы, и потом если программа не запущена просто удалить файл с харда. Это всё повесить в таймер =) тогда подвисаний не будет. Вобщем на сколько я сейчас понял что у меня и так всё хорошо )))) и не надо себе придумывать лишнего геморроя. Извините наверно задам ещё один последний вопросик =). Мне известно что в самом процессоре есть таймер. В семействе MCS - 51 он один. Но... это первая 8ми битка =) щас же идут уже 64 битки =). Так вот. На сколько я понимаю работа с внутренним таймером гораздо быстрее и надежней чем с таймером DPTR тобиш программным, тобиш скажем просто - потоком данных. Так вот у меня вопросик. Те таймера которые я ставлю на VCL панель они какие? Процессорные? Или же программные? Просто если они процессорные то сказать так... использовать их будет намного лучше чем поток, но если это программные то разницы я не вижу никакой. Всё что например делается в таймере будет как бы выглядеть repeat ... Sleep(Как бы интервал таймера) until Terminated; Это и будет аналогом таймера. Вся разница которую я щас вижу что таймер выполняет свой код и сразу передает управление гл. коду. А потокотаймер просто подвисает, но при прохождении он не тормозит гл. код. Так что же лучше использовать? Потоки ? Таймера? Если смотреть скажем в будущие. Ведь для х32 я вижу что лучше таймера т.к. они меньше "кушают" объема кода (код меньше). Но уже для х64... там уже многопроцессорность... и например если смотреть в будущие, лучше же чтобы код был как поток, тогда каждый процессор сможет его самостоятельно обрабатывать и переключать на другой процессор если 1 не справляется, а с таймерами уже такого не проделаешь. Я правильно мышлю? |
| Автор: CodeMonkey 19.1.2009, 15:12 | ||
Я вас про яйцо, вы мне про курицу Я не про ваш вопрос, а про задачу, в рамках которой возник сам вопрос. Зачем вам нужен извращённый запуск процесса и какое отношение он имеет к защите. Оболочка для http://msdn.microsoft.com/en-us/library/ms644902.aspx. Зависит от конкретной задачи. В большинстве случаев достаточно TTimer. Если обработчик должен выполняться долго или же нужна более высокая точность, то используют другие подходы. |
| Автор: bems 19.1.2009, 20:37 |
| Kirgston, шо за мерзость ты пишешь? |
| Автор: Kirgston 19.1.2009, 22:43 |
| о_О вы про что? |