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

Вниз

Настройки внутри *.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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.032 c
1-1091277202
_iceman_
2004-07-31 16:33
2004.08.15
TFontDialog.Execute


3-1090389271
sergt
2004-07-21 09:54
2004.08.15
обновление данных в DBGrid2


14-1091105447
ИдиотЪ
2004-07-29 16:50
2004.08.15
еще один веселый день


3-1090358453
sashok
2004-07-21 01:20
2004.08.15
Interbase


14-1090562370
MBo
2004-07-23 09:59
2004.08.15
Пятница. Большая пачка сложных задачек...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский