Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.08.2010, 15:22
ADM ADM вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 8
Репутация: 10
По умолчанию Обновление самого себя

Есть исходник программы которая обновляет файлы из интернета, т.е. если встречается файл с таким же именем, но размер разный то заменяет его.
Вот сам вопрос как сделать чтобы и мой ехе обновлялся т.е. как мне вывести его из памяти, заменить и перезапустить???
Ответить с цитированием
  #2  
Старый 11.08.2010, 15:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

сделать еще один и назвать его updater.exe
Ответить с цитированием
  #3  
Старый 11.08.2010, 16:13
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Как вариант,
В программе генерируется командный файл (*.cmd) и кладется возле программы. дальше программа запускает его и завершается.
В батнике следующий механизм. В начале пауза или ожидание завершения основной программы.Потом удаление старой версии, копирование новой и запуск новой. В самой программе, при старте всегда проверяешь, не лежит ли рядом с программой командный файл, если да, то удаляешь его.
Ответить с цитированием
  #4  
Старый 11.08.2010, 19:44
ADM ADM вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 8
Репутация: 10
По умолчанию

А можно по подробнее, как создать такой файл?
Ответить с цитированием
  #5  
Старый 12.08.2010, 07:59
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Что конкретно тебе не понятно?
Ответить с цитированием
  #6  
Старый 12.08.2010, 10:51
ADM ADM вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 8
Репутация: 10
По умолчанию

я бы хотел увидеть пример.
Ответить с цитированием
  #7  
Старый 12.08.2010, 11:24
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Готовое решение значит ждешь?
Вот кусок кода из проекта, писал его когда только начал вплотную изучать дельфи, должен помочь)

Последний раз редактировалось Asinkrit, 02.04.2011 в 20:20.
Ответить с цитированием
  #8  
Старый 13.08.2010, 10:38
ADM ADM вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 8
Репутация: 10
По умолчанию

У меня возникла проблема. Не работает процедура close; , при закрытий моей формы она всё равно остаёться, если хочу вручную закрыть то выдаёт ошибку.

Последний раз редактировалось ADM, 13.08.2010 в 11:22.
Ответить с цитированием
  #9  
Старый 13.08.2010, 17:04
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Я не телепат, что за ошибку выдает?
Ответить с цитированием
  #10  
Старый 14.08.2010, 11:08
ADM ADM вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 8
Репутация: 10
По умолчанию

ошибка просто связана с адрессом в памяти как я понял вот скрин
Ответить с цитированием
  #11  
Старый 15.08.2010, 03:17
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Теперь код покажи, что ты понаписал...
Ответить с цитированием
  #12  
Старый 04.09.2010, 10:33
ADM ADM вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 8
Репутация: 10
По умолчанию

Вот кусок который как бы должен отвечать за обновление ехе:
PHP код:
if ADest=UpExe then
  begin
                   AssignFile
(F,'Clients.cmd');
                   
Rewrite(F);
                   
Writeln(F,'@echo off');
                   
Writeln(F,'Pause');
                   
Writeln(F,'Del l2updater.exe /F /Q');
                   
Writeln(F,'Ren l2updater1.exe l2updater.exe');
                   
Writeln(F,'Start l2updater.exe /I');
                   
Writeln(F,'Del Clients.cmd /F /Q');
                   
CloseFile(F);
                   
FMain.Close;
                   
ShellExecute(Application.Handle,'open'PCHAR(ExtractFileDir(Application.ExeName)+'\Clients.cmd'), nilnilSW_SHOWNORMAL);

  
end 
Ответить с цитированием
  #13  
Старый 04.09.2010, 18:33
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Close должен идти после метода ShellExecute.
Ответить с цитированием
  #14  
Старый 04.09.2010, 22:25
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Очередной апдейтер для Ладвы
Чем готовые решения не устроили (некоторые даже open-source есть)?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #15  
Старый 05.09.2010, 04:24
ADM ADM вне форума
Прохожий
 
Регистрация: 11.08.2010
Сообщения: 8
Репутация: 10
По умолчанию

Так я их и использую, вот только само обновления как я понял здесь нет.
Переставил close всё равно такая ошибка.
Вот полностью вся процедура:
PHP код:
procedure GFilesThread.DoUncompress(const ASourceADestTFileName);
var
  
SourceDestTStream;
  
UpExe string;
  
FTextFile;
begin
  UpExe
:=Dir+'l2updater1.exe';
  
Source := TFileStream.Create(ASourcefmOpenRead fmShareDenyWrite);
  try
  if 
ADest=UpExe then
  begin
                   AssignFile
(F,'Clients.cmd');
                   
Rewrite(F);
                   
Writeln(F,'@echo off');
                   
Writeln(F,'Pause');
                   
Writeln(F,'Del l2updater.exe /F /Q');
                   
Writeln(F,'Ren l2updater1.exe l2updater.exe');
                   
Writeln(F,'Start l2updater.exe /I');
                   
Writeln(F,'Del Clients.cmd /F /Q');
                   
CloseFile(F);
                   
ShellExecute(Application.Handle,'open'PCHAR(ExtractFileDir(Application.ExeName)+'\Clients.cmd'), nilnilSW_SHOWNORMAL);
                   
FMain.close;
  
end
  
else
  
begin
    Dest 
:= TFileStream.Create(ADestfmCreate);
    try
      
DoUncompressStream(SourceDest);
    
finally
      Dest
.Free;
    
end;
  
end;
  
finally
    Source
.Free;
    
DeleteFile(ASource);
  
end;
end
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025