Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 660
1

Автообновления программы

20.03.2013, 22:19. Просмотров 2264. Ответов 6
Метки нет (Все метки)

Доброго времени суток всем.

Есть приложение. Свою функцию выполняет исправно, но я регулярно выпускаю обновления и просто отправляю их пользователям.
Подумал. что неплохо было бы сделать автообновление. Первая мысль, программа обращается к серверу и получает от него ответ, что есть новая версия и скачивает её по ФТП, например. До момента скачивания проблем нет.
Но вот как быть тут? экзешник же не сможет скачать файл и заменить им сам себя.
Прошу подсказки!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 22:19
Ответы с готовыми решениями:

Как удалить ссылку на запуск программы при удалении программы
Всем привет! Для установки - удаления программ использую такие пакеты как...

Создание программы для отправки данных в две другие программы
Всем приветики,форумчане:) Появился такой вопрос- есть две программы в которые...

Текст программы на Паскале хранится в файле на диске. Составить программу обработки текста программы
Текст программы на Паскале хранится в файле на диске. Составить программу...

Создание ярлыка программы на рабочем столе и в Пуск-Программы
Здравствуйте уважаемые программисты. Есть вопрос по созданию ярлыков на рабочем...

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

6
kpp
37 / 37 / 3
Регистрация: 28.01.2013
Сообщений: 122
20.03.2013, 23:33 2
Расскажу как поступал я в подобной ситуации.
Разрабатывал я как-то систему Клиент-Банк.
Сразу появилась необходимость автоматического обновления.
Написал дополнительно приложение-монитор, задача которого была при старте Клиент-Банка проверять признак наличия обновления и запускить обновление, если нужно было.
И еще одно приложение - апдейтер, в задачу которого входило непосредственная замена файлов, обновление данных, накатывание скриптов на базу, изменение ключей в реестре и т.д..

Схема была такая:
Основное приложение запускалось не напрямую, а сначала запускалось приложение-монитор, который при необходимости докачивал необходимые файлы для обновления и запускаал апдейтер.
Основное приложение регулярно выходит на связь с банком, за одно получает признак наличия новой версии.
При следующем старте основного приложения монитор делает своё дело.
Монитор обновляет апдейтер, а апдейтер все остальное.

P.S. Если кому интересно, Клиент-Банк назывался ICBank, использовался 8 лет в Банке "Аваль" (теперь Райффайзен Банк Аваль).
1
KaZaK555
7 / 7 / 4
Регистрация: 24.08.2011
Сообщений: 313
21.03.2013, 00:06 3
Цитата Сообщение от NapalmRain Посмотреть сообщение
Но вот как быть тут? экзешник же не сможет скачать файл и заменить им сам себя.
Прошу подсказки!
а почему же он не сможет? Просто, он удаляет старый а ставит новый. Я делал так чтобы у меня прям архив .zip качал и разпоковывал на месте потом удаляет сам архив и запускает прогу будто и не чего и не было Можно сделать по всякому.
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 660
21.03.2013, 00:07  [ТС] 4
Спасибо за ответ. Вариант приемлемый. И я его сам так же рассматривал, но думал, что можно всё как-то одной программой решить.
Ну или можно немного доработать ваш вариант.
Я бы сделал так: "монитор" - он же основная программа. Работает, работает. Опрашивает сервер. а то ей: обновись.
Программа сообщает пользователю: есть обновления, установить? Нажимаем Да и программа скачивает всё необходимое в папку Update, например. И по окончанию скачивания запускает непосредственно updater, а сама закрывается (или updater убивает основную программу). Потом переносит скачанные файлы в основную программу, в папке update всё удаляет, обновляет ключи, если нужно и т.д. И, по окончанию этих действий вновь запускает основную программу а сам закрывается. Функция монитора так же выполняет проверку на file exists в папке update и если там что-то есть, сообщает: у вас есть неустановленные обновления.
Ну вот как-то так...
Пожалуй, так и поступлю. Но если у кого-то есть другие идею. буду только рад.
1
HyperZen
489 / 243 / 55
Регистрация: 16.06.2011
Сообщений: 840
21.03.2013, 11:01 5
Программа при старте проверяет обновление на сервере, и, если таковое есть, то скачивает его, например в директорию Temp папки Windows, создает BAT-файл, запускает его, удаляет exe-файл программы, копирует скачанный ранее в нужную директорию...
Вот работающий пример, как программе удалить сам исполняемый файл, думаю можно доработать под Ваши нужды:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
program delete2;
 
uses
  SysUtils, windows;
 
var
  BatchFile: TextFile;
  BatchFileName: string;
  TM: Cardinal;
  TempMem: PChar;
 
begin
  BatchFileName:=ExtractFilePath(ParamStr(0))+ '$$336699.bat';
 
 
  AssignFile(BatchFile, BatchFileName);
  Rewrite(BatchFile);
 
  Writeln(BatchFile,':try');
  Writeln(BatchFile,'del "' + ParamStr(0) + '"');
  Writeln(BatchFile,'if exist "' + ParamStr(0) + '" goto try');
  Writeln(BatchFile,'del "' + BatchFileName + '"');
  CloseFile(BatchFile);
 
  TM:=70;
  GetMem (TempMem,TM);
  GetShortPathName (pchar(BatchFileName), TempMem, TM);
  BatchFileName:=TempMem;
  FreeMem(TempMem);
 
  winexec(Pchar(BatchFileName),sw_hide);
 
  halt;
end.
0
kpp
37 / 37 / 3
Регистрация: 28.01.2013
Сообщений: 122
21.03.2013, 12:05 6
Да, можно использовать средства архиваторов или командные файлы.
Однако эти варианты подходят для очень простых задач.
Ведь нужно не просто вслепую заменить экзешник, а проверить успешно ли выполнена операция, предпринять разнообразные действия для нештатных ситуаций, в случае если менять нужно несколько файлов ситуация усугубляется.
Если действий по обновлению много, правилом хорошего тона является отобразить пользователю процесс обновления чтобы не возникло у пользователя непонимания или даже паники.
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 660
21.03.2013, 20:04  [ТС] 7
Сравнивать можно, например через md5 хеш нового файла, монитор получает его с сервера и проверяет после скачивания, если успешно, запускает апдейтер, и тот так же проверяет после замены файлов.
0
21.03.2013, 20:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 20:04

Запуск внешней программы в форме программы
Всем привет :) может Вы меня и не поймете, но не пинайте, я только учусь :) ...

Запуск программы из другой программы
Всем добрый день. Помогите пожалуйста с проблемой - нужно реализовать запуск...

Создание автообновления программы с возможностью экстренного отката к предыдущим версиям
Есть идея написать модуль для обновления своей программы (скачивание обнов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru