Форум: "Основная";
Текущий архив: 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 файлу.
← →
Кириешки © (2004-08-02 10:00) [41]:)
← →
Anatoly Podgoretsky © (2004-08-02 10:04) [42]xShadow © (02.08.04 09:54) [40]
Разве это препятствие или кто то говорил про открытый ехе
← →
ALS (2004-08-02 10:07) [43]http://www.programmersheaven.com/zone24/cat31/4202.htm
← →
xShadow © (2004-08-02 10:11) [44]Anatoly Podgoretsky © (02.08.04 10:04) [42]
Я так думаю надо сразу уточнить, дабы не возникали топом темы "Взял код с этого форума а он не работает".
← →
Anatoly Podgoretsky © (2004-08-02 10:16) [45]А зачем, автор про это не спрашивал, задача его не ясна
← →
OSokin © (2004-08-03 20:29) [46]Да еще можно почитать статейки о программах-заставках... Они такое тоже используют. В основном RCData
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.04 c