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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2016, 14:07   #1
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию Ресурсы в программе

Код:
Res := TResourceStream.Create(Hinstance, 'build', 'EXEFILE');
        Res.SavetoFile(SaveDialog1.FileName);
        FreeAndNil(Res);
        patch(SaveDialog1.FileName,'123');
Вот есть такой код который извлекает из себя ресурсы; Затем этот файл сразу же патчится. Переодически вылетает ошибка которая говорит что такой файл отсутствует. Я так понял Res.SavetoFile не успевает извлечь файл?

Последний раз редактировалось Legeardo; 10.12.2016 в 15:24.
Legeardo вне форума Ответить с цитированием
Старый 10.12.2016, 16:20   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

По идее пока не закончиться SavetoFile, дальше не должна программа продолжаться.
Перед тем как патчить, сначала сделай проверку на существование файла.
FaTaL вне форума Ответить с цитированием
Старый 10.12.2016, 18:53   #3
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию

Я делал. Пишет вот что
First chance exception at $75934598. Exception class EFOpenError with message 'Cannot open file "123.exe". Процесс не может получить доступ к файлу, так как этот файл занят другим процессом'. Process Programm.exe (3236)
вот код процедуры которая патчит
Код:
procedure TForm4.patch(s,r: string);
var f:TfileStream;
    c:array[0..30] of char;
begin
  if FileExists(s) then
  begin
    try
      f:=TfileStream.Create(s,fmOpenWrite or fmShareDenyNone);
      f.Seek(f.Size,soFromBeginning);
      StrPCopy(c, r);
      f.Write(c,sizeof(c));
    finally
      FreeAndNil(f);
    end;
  end
  else
  begin

  end;
end;
Я же перед тем как вызвать данную процедуру освободил ресурсы FreeAndNil(Res);

Последний раз редактировалось Legeardo; 10.12.2016 в 18:58.
Legeardo вне форума Ответить с цитированием
Старый 11.12.2016, 02:42   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Legeardo Посмотреть сообщение
Я делал. Пишет вот что
First chance exception at $75934598. Exception class EFOpenError with message 'Cannot open file "123.exe". Процесс не может получить доступ к файлу, так как этот файл занят другим процессом'. Process Programm.exe (3236)
А файл, который нужно патчить действительно так и называется?
northener вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ресурсы W0LF Общие вопросы Delphi 1 01.08.2009 13:36
Ресурсы mrandrey Общие вопросы Delphi 10 13.07.2007 15:39
Ресурсы, зачем нужны ресурсы Hallo Обсуждение статей 0 12.12.2006 21:30