Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Настройки внутри *.exe [D7, WinXP]


Страницы:   1 2 3

parovoZZ ©   (2004-07-27 21:40:00) 

Возможно ли сохранять данные внутри исполняемого файла?


OSokin   (2004-08-03 20:29:00) [1]

Да еще можно почитать статейки о программах-заставках... Они такое тоже используют. В основном RCData


Anatoly Podgoretsky   (2004-08-02 10:16:00) [2]

А зачем, автор про это не спрашивал, задача его не ясна


xShadow   (2004-08-02 10:11:00) [3]

Anatoly Podgoretsky ©   (02.08.04 10:04) [42]
Я так думаю надо сразу уточнить, дабы не возникали топом темы "Взял код с этого форума а он не работает".


ALS   (2004-08-02 10:07:00) [4]

http://www.programmersheaven.com/zone24/cat31/4202.htm


Anatoly Podgoretsky   (2004-08-02 10:04:00) [5]

xShadow ©   (02.08.04 09:54) [40]
Разве это препятствие или кто то говорил про открытый ехе


Кириешки   (2004-08-02 10:00:00) [6]

:)


xShadow   (2004-08-02 09:54:00) [7]

Кириешки ©   (02.08.04 09:45) [39]
И это всё применимо к закрытому EXE файлу.


Кириешки   (2004-08-02 09:45:00) [8]

_________________________
+++++++++++++++++++++++++

Добавить данные в EXE файл и получить их можно ТАК :

function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
 aStream: TFileStream;
 iSize: Integer;
begin
 Result := False;
 if not FileExists(AFileName) then
   Exit;
 try
   aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
   MemoryStream.Seek(0, soFromBeginning);
   // seek to end of File
   // ans Ende der Datei Seeken
   aStream.Seek(0, soFromEnd);
   // copy data from MemoryStream
   // Daten vom MemoryStream kopieren
   aStream.CopyFrom(MemoryStream, 0);
   // save Stream-Size
   // die Streamgro?e speichern
   iSize := MemoryStream.Size + SizeOf(Integer);
   aStream.Write(iSize, SizeOf(iSize));
 finally
   aStream.Free;
 end;
 Result := True;
end;
function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
 aStream: TFileStream;
 iSize: Integer;
begin
 Result := False;
 if not FileExists(AFileName) then
   Exit;
 try
   aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
   // seek to position where Stream-Size is saved
   // zur Position seeken wo Streamgro?e gespeichert
   aStream.Seek(-SizeOf(Integer), soFromEnd);
   aStream.Read(iSize, SizeOf(iSize));
   if iSize > aStream.Size then
   begin
     aStream.Free;
     Exit;
   end;
   // seek to position where data is saved
   // zur Position seeken an der die Daten abgelegt sind
   aStream.Seek(-iSize, soFromEnd);
   MemoryStream.SetSize(iSize - SizeOf(Integer));
   MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
   MemoryStream.Seek(0, soFromBeginning);
 finally
   aStream.Free;
 end;
 Result := True;
end;
procedure TForm1.SaveClick(Sender: TObject);
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 Memo1.Lines.SaveToStream(aStream);
 AttachToFile('Test.exe', aStream);
 aStream.Free;
end;
procedure TForm1.LoadClick(Sender: TObject);
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 LoadFromFile('Test.exe', aStream);
 Memo1.Lines.LoadFromStream(aStream);
 aStream.Free;
end;


T-Lex   (2004-08-01 13:30:00) [9]

to xShadow:
> И от добавленного кода размер экзешника измениться!

Чаще не меняется. И если меняется, то не на много. И эти дополнительные строчки можно заранее написать, а потом только цифру смещения изменить. тогда размер не изменится. Ну и вообще, как верно подмечено в [37], конец файла надо искать: seek eof(f)


мимо   (2004-07-29 11:07:00) [10]

дописать в хвост файла ...append или как там его?


Anatoly Podgoretsky   (2004-07-29 10:29:00) [11]

xShadow ©   (29.07.04 10:24) [35]
Платформа НТ позволяет это делать автоматически, называется мапирование


xShadow   (2004-07-29 10:24:00) [12]

T-Lex   (29.07.04 02:04) [34]
И от добавленного кода размер экзешника измениться!
И запишешь уже возможно в другую область!
Лучше всё же хранить данные в реестре + дублировать их в ini файл вот собстенно и всё.


T-Lex   (2004-07-29 02:04:00) [13]

ответы на...
"зачем":
ну, например, если есть утилитка (этот один *.exe) и ее надо таскать в разные места и т.п. типа, смотрелка каких-либо файлов в директории... ну или мало ли че еще...

ну и, собстно,
"Как":
для начала в тексте программы в любом месте пишешь что-нить типа
s:='++++++++++++++++++++++++++++++++++++++';
После чего компиллируешь. после этого открываешь полученный экзешник через какой-нить hex-editor... (DN, NC,... или че там сейчас народ юзает? :)  и ищешь там позицию, откуда начинаются эти плюсы. (допустим это 2030 байт)
После этого опять лезем в исходник и пишем:
var
 f: file of byte;
...
assignfile(f,'project.exe');
reset(f); seek(f,2030); write(f,life); write(f,money); write (f,condoms); .....
ну и соответственно так же читаем:
seek(f,2030); read(f,life);....

Вот... Не знаю, на сколько это грамотно... Этот способ придумал сам, когда еще на QBASIC под DOS писал...


parovoZZ   (2004-07-28 21:57:00) [14]

Ну ясно, спасибо за проявленный интерес.


  (2004-07-28 21:16:00) [15]

Удалено модератором


Anatoly Podgoretsky   (2004-07-28 11:49:00) [16]

Да вариант лучше, но дорогой.


Sun bittern   (2004-07-28 11:42:00) [17]

Anatoly Podgoretsky ©   (28.07.04 11:01) [29]

Предложенный вами выше вариант Anatoly Podgoretsky ©   (28.07.04 09:22) [19] все на CD-ROM ныне не в моде. Гораздо лучше иметь дополнительные машины в горячем резерве полностью дублирующие главную. Например, как на АЭС.


Anatoly Podgoretsky   (2004-07-28 11:01:00) [18]

Главное что это не решается задачи, которая была поставлена так - при удалении папки с программой! parovoZZ ©   (28.07.04 02:39) [12]


Kerk   (2004-07-28 10:50:00) [19]


> Kloun   (28.07.04 10:44) [27]

ну-ну. и как ты это ресурс к своему ехе в рантайм добавишь?


Kloun   (2004-07-28 10:44:00) [20]

человек спрашивал как засунуть настройки в exe-шник - лучший способ, помоему, положить их в ресурсы


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо