Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2010, 21:21   #1
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию Лимит на запуск программы

Программа (не важна ее функциональность) должна запускаться строго 10 раз..не больше... но, нельзя создавать сторонние файлы (dll, res и т.д.) и пользоваться реестром..

пытался записать в .ехе файл информацию, а потом считывать, но в открытый файл ничего не запишешь.... Пример взял с инета.

Код:
 //Вот процедура, добавляющая какие-либо данные к существующему 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);
  // поиск конца файла
  aStream.Seek(0, soFromEnd);
  // копируем данные из MemoryStream
  aStream.CopyFrom(MemoryStream, 0);
 // сохраняем размер потока
  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);
 // ищем позицию с которой начинаются сохраненные данные
 aStream.Seek(-SizeOf(Integer), soFromEnd);
 aStream.Read(iSize, SizeOf(iSize));
 if iSize > aStream.Size then
 begin
  aStream.Free;
  Exit;
 end;
 // ищем позицию сохраненных данных
  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.Button2Click(Sender: TObject);//сохранить данные
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 Memo1.Lines.SaveToStream(aStream);
 AttachToFile('Project1.exe', aStream);
 aStream.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);//загрузить данные
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 LoadFromFile('Project1.exe', aStream);
 Memo1.Lines.LoadFromStream(aStream);
 aStream.Free;
end;

Может есть какой-нибудь способ сохранить данные непосредственно в exe?
SolovejK вне форума Ответить с цитированием
Старый 16.04.2010, 21:27   #2
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

SolovejK, на семёрке вроде нельзя писать инфу в экзешник, а для хрюши полно примеров в инете должно быть
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 16.04.2010, 22:06   #3
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
Может есть какой-нибудь способ сохранить данные непосредственно в exe?
Есть! Используется модуль, разработаный Arigato (спасибо большое ему).
Обсуждалось на форуме, ссылку не сохранил, надо поискать.
PS. В примере лимит = 5 запусков (выставляется в подключаемом модуле).
Вложения
Тип файла: rar FormLimitExe.rar (7.3 Кб, 137 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 16.04.2010, 22:31   #4
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Спасибо большое DeKot, пример замечательный!
Но все равно там создается tmp файл, видимо по другому записать информацию в exe невозможно.
SolovejK вне форума Ответить с цитированием
Старый 16.04.2010, 22:40   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Слышал от кого то, что можно эту инфу хранить в Защищенном хранилище.
psycho-coder вне форума Ответить с цитированием
Старый 16.04.2010, 23:00   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
Но все равно там создается tmp файл
Только во время работы программы. Потом он (temp) cтирается. Во вском случае на моих системах (ОС) так.
Цитата:
видимо по другому записать информацию в exe невозможно.
Это оптимальный метод. Экзешник перезаписывается во время проги, все это в фоновом режиме.
Чего тебе, хороняка, надо ещё ("Иван Васильевич меняет профессию").
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 16.04.2010 в 23:04.
DeKot вне форума Ответить с цитированием
Старый 25.04.2010, 11:39   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Сори, если я тупо не врубился. Ведь даже если записать данные в сам exe-шник, можно просто хранить резервную копию другого неизмененного exe-шника и автоматом при запуске системы обновлять рабочий вариант.

Последний раз редактировалось Sibedir; 25.04.2010 в 11:45.
Sibedir вне форума Ответить с цитированием
Старый 25.04.2010, 11:50   #8
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Способ для мазахистов:
Делаете несколько ini, в ней запись, количество запусков, так же несколько записей в реестре, в разных ветках... Конечно же записи шифруете, имена ключей не относящихся к программе, что бы обычным поиском не попалили...

+ попробуйте приаттачить к explorer'у, если это вообще возможно или к другому файлу, который находиться на всех компах... Вообщем, эксперементируйте
W0LF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск программы по времени Talemir Общие вопросы Delphi 17 03.02.2010 16:33
Запуск программы Vladya Помощь студентам 4 17.11.2008 11:38
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33
Запуск программы Egych Общие вопросы Delphi 4 04.05.2007 09:46