Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

Как загрузить файл exe в память полностью?   Найти похожие ветки 

 
Woolen ©   (2004-10-13 10:21) [0]

Кто знает, подскажите как сделать так, чтобы exe полностью загружался в память и подгрузка не требовалась? Возможно есть другие решения задачи... Она состоит в следующем: продукт должен размещаться на дисках CD, в колличестве не стеснен (думаю, будет штук 10), при этом DVD недопустим и установка софта на жесткий диск тоже. Я предполагаю, что exe можно как-то загрузить полностью с первого CD. Если это так, подскажите, как это сделать. Спасибо.


 
Дмитрий Ботвин   (2004-10-13 10:31) [1]

Ты это хочешь программно сделать, т.е. запустить чей-то ехе-файл. Или про свой ехе-шник говоришь???


 
BiN ©   (2004-10-13 10:33) [2]

Подобные программы (например, инсталяторы) копируют загрузчик (распаковщик) во временную папку, а затем уже запрашивают данные с дисков.
Я так понял, что проблема в невозможности вставить все CD одновременно? :)


 
Woolen ©   (2004-10-13 10:38) [3]


> Ты это хочешь программно сделать, т.е. запустить чей-то
> ехе-файл. Или про свой ехе-шник говоришь???

Свой. Он, по моей задумке (пока что я думаю именно так), должен размещаться на первом CD, но отображать данные с разных CD и требовать и вставки по мере необходимости.


 
Дмитрий Ботвин   (2004-10-13 10:44) [4]

Тогда тока скопировать его, как сказано выше, во временную папку,
например винды, и запускать от туда


 
Woolen ©   (2004-10-13 10:46) [5]


> Подобные программы (например, инсталяторы) копируют загрузчик
> (распаковщик) во временную папку, а затем уже запрашивают
> данные с дисков.

Если произойдет перезагрузка, то он там останется и не будет удален, а это противоречит требованиям ТЗ. Заказчик хочет, чтобы никаких файлов на компьютере не оставалось в явном виде. Даже при выключении электричества.

> Я так понял, что проблема в невозможности вставить все CD
> одновременно? :)

Примерно так. Если быть точным, проблема в невозможности вставить одновременно CD с программой и CD с данными, которые должны быть отображены. По требованию ТЗ все должно работать на компьютерах с одним приводом CD.


 
BiN ©   (2004-10-13 10:52) [6]

..Если произойдет перезагрузка, то он там останется и не будет удален, а это противоречит требованиям ТЗ

Значит, ТЗ составлена неправильно или же тебе придется писать свою ОС.
Как вариант, предлагаю после запуска распаковщика (назовем его так) из временной директории сразу же запускать функцию MoveFileEx с указанием пути распаковщика и с флагом MOVEFILE_DELAY_UNTIL_REBOOT - в этом случае удаление программы отложится до перезагрузки.


 
Woolen ©   (2004-10-13 11:25) [7]


> Значит, ТЗ составлена неправильно или же тебе придется писать
> свою ОС.

Не я придумал. ТЗ писали под заказчика и вовсе не я. Если бы все от меня зависело, я бы такого, мне кажется, не придумал.

> Как вариант, предлагаю после запуска распаковщика (назовем
> его так) из временной директории сразу же запускать функцию
> MoveFileEx с указанием пути распаковщика и с флагом MOVEFILE_DELAY_UNTIL_REBOOT
> - в этом случае удаление программы отложится до перезагрузки.

Спасибо за совет. К сожалению, если exe срубить из Task Manager, то файлы останутся до перезагрузки. Этого быть не должно.


 
DeadMeat ©   (2004-10-13 11:51) [8]

Не знаю как там насчет таск мэнеджера, но можно пойти извращенным путем:
прописать в реестре в ветке RunOnce путь к батнику во временной папке винды. Этот батник при следующей перезагрузке удалит все файлы и себя вместе с ними...


 
Woolen ©   (2004-10-13 12:15) [9]


> Не знаю как там насчет таск мэнеджера, но можно пойти извращенным
> путем:
> прописать в реестре в ветке RunOnce путь к батнику во временной
> папке винды. Этот батник при следующей перезагрузке удалит
> все файлы и себя вместе с ними...

Это точно извращение.
Можно удалять файлы и без батника, а просто одной коммандой. Такой пример есть в FAQ. Комманда выглядит как: "command.com /c del FILENAME.EXT". Видимо под EXT подразумевали EXE. Это чуть менее извращенный способ. А, вообще, для этого есть функция MoveFileEx. Одна из ее функций - удаление файлов при перезагрузке (к сожалению, только в ОС с ядром из семейства NT).
Но выше перезагрузка уже обсуждалось. Это не проблема. Проблема - отруб экзешника без перезагрузки.
После того, как диск извлечен - ничего не должно оставаться.


 
Erik1 ©   (2004-10-13 12:54) [10]

Тогда только хакерские способы, например засунуть часть своего кора в Explorer, с помощю CreateRemoteThread. И следить за удалением нужных файлов. Или вовсе экстремальные способы как забратся в ring 0 как драйвер работать с файловай системой, отслеживать завершение процеса и выполнять зачистку. Еще способ: можно реагировать на собщения WM_CLOSE и пр... и производить выход с удалением. Такой код есть, могу поделится, едесь на форуме проходил.


 
Erik1 ©   (2004-10-13 12:54) [11]

Тогда только хакерские способы, например засунуть часть своего кора в Explorer, с помощю CreateRemoteThread. И следить за удалением нужных файлов. Или вовсе экстремальные способы как забратся в ring 0 как драйвер работать с файловай системой, отслеживать завершение процеса и выполнять зачистку. Еще способ: можно реагировать на собщения WM_CLOSE и пр... и производить выход с удалением. Такой код есть, могу поделится, едесь на форуме проходил.


 
-SeM-   (2004-10-13 12:57) [12]

Как предположение: а IMAGE_NT_HEADERS - IMAGE_FILE_HEADER - Characteristics Run from swap (removeable & net) случаем не поможет?


 
Woolen ©   (2004-10-13 13:24) [13]


> Как предположение: а IMAGE_NT_HEADERS - IMAGE_FILE_HEADER
> - Characteristics Run from swap (removeable & net) случаем
> не поможет?

Спасибо огромное! Идея свехценная. Ведь в винде действительно предусмотрен мой случай! Я и не догадывался, что там есть такой флаг как IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP! Еще один вопрос. Ведь Delphi сама не позволяет изменять флаги в IMAGE_FILE_HEADER. Есть ли способ этот флаг туда добавить при написании программы на Delphi? Может быть, после компиляции? И еще, воспринимает ли система компакт-диск как REMOVABLE при загрузке исполняемого файла?


 
-SeM-   (2004-10-13 13:51) [14]

Woolen ©   (13.10.04 13:24) [13]


> Есть ли способ этот флаг туда добавить при написании программы на Delphi?

Вряд ли ...


> Может быть, после компиляции?

Ага любым редактором PE-файлов :)


> воспринимает ли система компакт-диск как REMOVABLE при загрузке
> исполняемого файла?

На это ответить нечего. Знаний не хватает. Может Мастера объяснят?

Еще как вариант - пожать екзешник упаковщиком. Говорят он потом весь в память грузится ;)


 
SammIk ©   (2004-10-13 14:20) [15]

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


 
Lin7   (2004-10-13 14:33) [16]


> SammIk ©   (13.10.04 14:20) [15]

Я могу ошибаться, но по-моему при запуске EXE-шника с дискеты винда копирует его во временный файл и запускает этот файл с винта. - это заложено в винде.


 
Woolen ©   (2004-10-13 16:12) [17]

Опять ступор... Может я неправильно понимаю?
Думал написать прогу для выставления этого флага. Решил начать с того, чтобы найти этот флаг. Неи нашел. Думал, просмотреть в отладчике, что оттуда читается в поток. Решил сделать так:

FS: TFileStream;
INH: TImageNtHeaders;

ZeroMemory(@INH,SizeOf(INH));
if OpenExeDialog.Execute then
 begin
 FS := TFileStream.Create
  (OpenExeDialog.FileName,fmOpenReadWrite);
 FS.Read(INH.Signature,SizeOf(INH.Signature));
 FS.Read(INH.FileHeader,SizeOf(INH.FileHeader));
 FS.Free;
 end;

В отладчике после этого Characteristics = 0. Только я собирал екзешник в VS и в параметрах компоновщика явно выставил опцию Swap Run From CD, которая и отвечает у мелкомягких за вставку этого флага. Что я делаю не так? Может экзешник начинается не так, как я себе представляю?


 
Woolen ©   (2004-10-13 17:43) [18]

Понял свою ошибку. Виндовый екзешник начинается после досовского. Но как найти начало виндового экзешника? Может ли до его начала встретиться "PE"#0#0?


 
-SeM-   (2004-10-13 18:03) [19]

Woolen ©   (13.10.04 17:43) [18]

Встретиться может что угодно.
Чтобы найти PE-заголовок нужно перейти по смещению, указанном в значением e_lfanew.

ЗЫ А вообще не плохо было бы почитать о структуре РЕ-файла.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.053 c
3-1099400743
Nexel
2004-11-02 16:05
2004.11.28
Delphi+Bde+Paradox=Index out of date


3-1099061248
Kergma
2004-10-29 18:47
2004.11.28
внешний ключ хочю.................


1-1100358113
cfytr
2004-11-13 18:01
2004.11.28
Алгоритм заполнения массива


14-1100164229
TUser
2004-11-11 12:10
2004.11.28
Word


8-1093899182
AlexZ
2004-08-31 00:53
2004.11.28
Где бы почитать про GDI, кроме Win32P sR





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский