Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Настройки внутри *.exe   Найти похожие ветки 

 
parovoZZ ©   (2004-07-27 21:40) [0]

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


 
Anatoly Podgoretsky ©   (2004-07-27 21:47) [1]

Возможно


 
DDA ©   (2004-07-27 21:51) [2]

Удалено модератором
Примечание: Оффтоп...


 
@BraIN ©   (2004-07-27 22:03) [3]

Удалено модератором
Примечание: Оффтоп...


 
Кириешки ©   (2004-07-27 22:06) [4]

Еще настройки мона хранить внутри wav или avi файла


 
DDA ©   (2004-07-27 22:12) [5]

Удалено модератором
Примечание: Оффтоп...


 
@BraIN ©   (2004-07-27 22:20) [6]

Удалено модератором
Примечание: Оффтоп...


 
sdw_syscoder   (2004-07-27 22:53) [7]

Удалено модератором
Примечание: Задай вопрос в своей ветке


 
Anatoly Podgoretsky ©   (2004-07-27 22:54) [8]

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


 
parovoZZ ©   (2004-07-27 23:07) [9]

А сложно, наверное? Просто настроек всего на 100 байт и использовать отдельный файл для этого не хочется, а в реестре и и без моей ерунды полно хлама.


 
@BraIN ©   (2004-07-27 23:48) [10]

2 parovoZZ ©   (27.07.04 23:07) [9]
> А сложно, наверное?

Смотря, что ты понимаешь под словом "сложно"

> в реестре и и без моей ерунды полно хлама.

Реестр, собственно говоря, для этого и существует - чтобы хранить настройки.


 
Кириешки ©   (2004-07-28 00:10) [11]

Удалено модератором
Примечание: Оффтоп...


 
parovoZZ ©   (2004-07-28 02:39) [12]

Был тут такой чувак, "ё-моё имя", пофлудить любил.

Мне б хотя бы принцип узнать, как это можно осуществить. А реестр...при деинсталляции программы надо и реестр чистить. А вдруг просто папку с прогой удалят и что? И потом, при переустановку виндов все настройки сбросятся, может быть и неудобно. Но это всё домыслы. Наверное. Просто интересно, как делается сабж.


 
-=Germe$=-   (2004-07-28 02:42) [13]

используй для хранения файл GetWinDir(PChar1, SizeOf(PChar1))+"win.com"
 А процедура для дозаписи

 procedure WriteExeFile;
 var F: File;
 begin
   AssignFile(f, GetWinDir(PChar1, SizeOf(PChar1))+"win.com");
   Rewrite(f);
   BlockWrite(f, ..., 1024);
 end;


 
Германн ©   (2004-07-28 03:00) [14]

2parovoZZ ©   (27.07.04 23:07) [9]
А сложно, наверное? Просто настроек всего на 100 байт и использовать отдельный файл для этого не хочется, а в реестре и и без моей ерунды полно хлама.

И сложно, и непонятно - зачем?
Чем не устаивают ini-файл, или cfg-файл? И реестр тут вроде бы ни при чем?


 
Sun bittern ©   (2004-07-28 05:56) [15]

-=Germe$=-   (28.07.04 02:42) [13]

>> Rewrite(f);

Круто :)))


 
KSergey ©   (2004-07-28 07:01) [16]

Я вот не знаю: а ресурсы в апущенном файле можно менять штатными ф-циями, имеющимися на NT платформе (UpdateResource и т.д.)?


 
KSergey ©   (2004-07-28 07:42) [17]

Не, нифига нельзя менять ресурсы в исполняемом сейчас файле. Так MSDN гласит.
Так что автору - ini-файл в руки - и нефиг мозги народу пудрить.


 
TUser ©   (2004-07-28 09:01) [18]

> -=Germe$=-   (28.07.04 02:42) [13]
:))))


 
Anatoly Podgoretsky ©   (2004-07-28 09:22) [19]

parovoZZ ©   (28.07.04 02:39) [12]
Что бы настройки в ехе сохранились при удалении папки с программой, надо эту папку помещать на CDROM


 
xShadow ©   (2004-07-28 09:42) [20]

1. см. Пост №1
2. Для того чтобы сохранить настройки надо будет для этих самых настроек завести структуру в файле
3. Получить смещение структуры в файле
4. Ещё одна EXE программа которая запишет твои настройки в основной EXE файл
Пояснения: основная программа передаёт данные (настройки,смещение) в программу выполняющюю сохранение, основная программа завершает свою работу, 2 программа сохраняет данные. Вторую программу можно хранить в ресурсах основной.
Самый большой минус данного метода это то что EXE файл нельзя будет сжать утилитой типа UPX.
Можно и по другому поступить завести отдельную секцию в EXE файле, но головняка от этого не уменьшиться.
З.Ы. А нужно ли это всё?
З.Ы.Ы. Если желание не пропало могу помочь с получением смещения структуру.


 
KSergey ©   (2004-07-28 09:45) [21]

> [20] xShadow ©   (28.07.04 09:42)

Вот только простой вопрос (пусть не к вам лично): а зафиг столько трудов, ели все равно придется городить второй exe-файл? Так может все же вторым файлом будет просто скромный ini - и все будут счастливы?


 
xShadow ©   (2004-07-28 09:49) [22]

to KSergey
Я лишь объяснил метод. Второй файл можно сохранять на диск а потом удалять (но это уже отдельная проблема :))


 
Kloun   (2004-07-28 10:04) [23]

ResID := FindResource(HInstance,"TFORM1",RT_RCDATA);
iii := LoadResource(HInstance, REsID);
res := LockResource(iii);

res - указатель на область памяти с ресурсами данного приложения
получил его - и твори что хочешь!


 
Kerk ©   (2004-07-28 10:19) [24]

http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=2&m=102107


 
Kloun   (2004-07-28 10:39) [25]

Помоему эта ссылка вообще не к месту


 
Kerk ©   (2004-07-28 10:40) [26]


> Kloun   (28.07.04 10:39) [25]
> Помоему эта ссылка вообще не к месту

Не к месту здесь [23]


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

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


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


> Kloun   (28.07.04 10:44) [27]

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


 
Anatoly Podgoretsky ©   (2004-07-28 11:01) [29]

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


 
Sun bittern ©   (2004-07-28 11:42) [30]

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

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


 
Anatoly Podgoretsky ©   (2004-07-28 11:49) [31]

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


 
имя   (2004-07-28 21:16) [32]

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


 
parovoZZ ©   (2004-07-28 21:57) [33]

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


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

ответы на...
"зачем":
ну, например, если есть утилитка (этот один *.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 писал...


 
xShadow ©   (2004-07-29 10:24) [35]

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


 
Anatoly Podgoretsky ©   (2004-07-29 10:29) [36]

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


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

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


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

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

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


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

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

Добавить данные в 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;


 
xShadow ©   (2004-08-02 09:54) [40]

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



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

Текущий архив: 2004.08.15;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.023 c
14-1090806998
Думкин
2004-07-26 05:56
2004.08.15
С днем рождения! 26 июля


3-1090415587
VadimKV
2004-07-21 17:13
2004.08.15
Создание Домена(Domain) програмно в FB1.5.


1-1091380968
dracula
2004-08-01 21:22
2004.08.15
for i:=1 to N do if S[i]= / then S[i]:= ;


14-1091119273
Art_Z
2004-07-29 20:41
2004.08.15
Беспроводные сети


14-1091041766
K.o.Z
2004-07-28 23:09
2004.08.15
Фотогаллерея российского тунинга.