Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать файл, из самого себя 
:(
    Опции темы
Zero
  Дата 23.1.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Привет... Я хочу создать копию exe-файла по указаному пути, при запуске моего exe-файла. Но у меня всё время выдаётся ошибка при компиляции, при попытке открыть свой файл. Возможно самого себя открыть нельзя... smile может кто-нибудь знает альтернативу вот этого кода:
Код

var
 Form1: TForm1;
 f,fc:file;
 buf:integer;
....
procedure TForm1.FormCreate(Sender: TObject);
begin
 assignfile(fc,'c:\copy_project1.exe');
 assignfile(f,'project1.exe');
 reset(f,1);
 rewrite(fc,1);
 while not(eof(f)) do
   begin
     blockread(f,buf,1);
     blockwrite(fc,buf,1);
   end;
 closefile(f);
 closefile(fc);
end;

PM MAIL ICQ   Вверх
Alex
Дата 23.1.2005, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Воспользуйся одной из функций копирования файлов.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 24.1.2005, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Alex конечно спасибо за наведение на правильный путь, незнаю зачем я решил сам придумывать способы копирования файлов, когда уже всё давно придумано. smile
Но всётаки есть др. проблемма. Когда компилируешь, то при попытке скопровать самого себя, выдаётся сообщение, что процес типа занят др. процессом, и текущий типа останавливается. Но эту проблему я вначале какбы решил, т.е. записать это всё на таймер, при компилящии через 10 миллисекунд, выдаётся ошибка, через деспетчер всё вырубаешь, а при этом объектный код успевает создатся, и там при первом запуске всё нормально. Но какбы копия этого екзешника, когда её запускаешь, то выдаются те же ошибки что и при обычной компилящии. Вообщем вот
Код

var
 Source, Destiny: TFileStream;
begin
 Source := TFileStream.Create('Project1.exe', fmOpenRead);
 Destiny := TFileStream.Create('c:\Copy_Project1.exe', fmCreate);
 Destiny.CopyFrom(Source,0);
 Source.Free;
 Destiny.Free;
end;
не знаете, чё тут можно исправить. Написан он на событие таймера. Ну мне бы желательно так. (FormCreate)
PM MAIL ICQ   Вверх
Alex
Дата 24.1.2005, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Русским языком сказал воспользоваться функцией копирования, а не изобретать велосипед:
Код

CopyFileA(PChar(ParamStr(0)), PChar(ExtractFilePath(ParamStr(0)) + 'Test.exe'), True);



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 24.1.2005, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Alex @ 24.1.2005, 00:41)
Русским языком сказал воспользоваться функцией копирования
А точнее
Цитата(Alex @ 23.1.2005, 21:52)
одной из

Вобщем, спасибо большое. smile
PM MAIL ICQ   Вверх
Alex
Дата 24.1.2005, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Zero @ 24.1.2005, 01:01)
А точнее
Цитата(Alex @ 23.1.2005, 21:52)
одной из

Именно одной из:
Код

if not FileExists(ExtractFilePath(ParamStr(0)) + 'Test.exe') then begin
   Source := TFileStream.Create(ParamStr(0), fmShareDenyNone);
   Destiny := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'Test.exe', fmCreate);
   Destiny.CopyFrom(Source,0);
   Source.Free;
   Destiny.Free;
 end;

smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.