Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление программы [D7, XP]


lewka_s ©   (2014-07-03 08:19:00) 

Приветствую, мастера!
Есть код, который выполняет обновление моей программы.
if FileExists('temp.exe') then DeleteFile('temp.exe');
     ss:=Application.ExeName;
     AssignFile(Current_file, Application.ExeName);
     Rename(Current_file, 'temp.exe');
     AssignFile(new_file,pach_up+'\Bak_up.exe');
     Rename(new_file,ss);
     Application.Terminate;
     WinExec(PChar(ss),SW_SHOWNORMAL);

Этот код свое дело делает, т.е. обновляет мою программу, но удаляет файл обновления (Bak_up.exe).
Подскажите как это исправить? Что бы файл Bak_up.exe оставался на своем месте


Кщд   (2014-07-03 11:39:00) [1]

>lewka_s   (03.07.14 11:09) [7]
вам всего-то нужно скопировать Bak_up.exe в файл с именем Application.ExeName
и завязывать с программированием


lewka_s   (2014-07-03 11:09:00) [2]

Решил вот так сделать

AssignFile(new_file,pach_up+'\Bak_up.exe');
Rename(new_file,ss);
CopyFile(PChar(pach_up+'\Bak_up_copy.exe'),PChar(pach_up+'\Bak_up.exe'),False);
DeleteFile(PChar(pach_up+'\Bak_up_copy.exe'));
Application.Terminate;


han_malign   (2014-07-03 09:55:00) [3]


> Rename ведь переименовывает файл, а не удаляет.

- ну...
Звали тебя, скажем, Серожа, а в 25 лет ты поменял паспорт на имя Ваня.
Вопрос - где теперь кредиторам искать Серожу?

Переименование - это оптимизированная версия копирования + удаления...

Для достижения просветления - предлагаю обратить внимание на Windows.CopyFile()...


Dennis I. Komarov   (2014-07-03 09:49:00) [4]

Напишу нормальный "обновлятор" - от 750$


lewka_s   (2014-07-03 09:29:00) [5]


> Rename(new_file,pach_up+'\'+ss);

Так пишет "I/O error 161"
т.к. pach_up - это путь до файла обновления. Имя файла обновления не совпадает с именем файла предыдущей версии программы.


ВладОшин   (2014-07-03 08:47:00) [6]

?
Rename(new_file,ss); -> Rename(new_file,pach_up+'\'+ss);


ВладОшин   (2014-07-03 08:45:00) [7]

переименован как уже существующий


lewka_s   (2014-07-03 08:35:00) [8]

Выполнял построчно этот код. Файл Bak_up.exe удаляется на строке Rename(new_file,ss);. НО почему? Rename ведь переименовывает файл, а не удаляет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо