У меня программа автоматически проверяется на версию. Возможно ли такое, чтоб в случае новой версии она автоматически скачивала бы новую и заменялась на неё? Если да, то как? Подскажите, пожалуйста.
Ответы (3 шт):
Это, конечно же, возможно. Раз это вопрос новичка в Delphi, то постараюсь ответить доходчиво, как такое реализовать.
- Для начала вам нужно завести хостинг или аккаунт на каком-л. облачном хранилище. Это необходимо для того, чтобы программа имела в сети «свой уголок», откуда могла бы проверять новую версию и самообновляться в случае появления новой. Лично я вам советую заводить именно хостинг, нежели пользоваться услугами «облаков», так как у этих облачных хранилищ очень ограничена пропускная способность канала, а если пользователей у вашей «программы» будет очень много, то аккаунт забанят из-за большого трафика. Пользуйтесь хостингом.
- Далее вам надо создать на этом хостинге файлик, в котором будет лежать текущая(последняя) версия вашего «продукта». Например, 1.72.. И еще, конечно же, на хостинг надо поместить «свежую» версию вашего «продукта», чтобы можно было её скачать.
- Далее в самой программе вы должны каждый раз при запуске проверять версию из того файла на хостинге, который содержит версию. В самой программе, естественно, должна быть константа, содержащая номер версии программы. Это можно сделать с помощью TIdHttp с панели IndyClients. Если версия больше, то качаем новую(расположена на нашем хостинге.
- Качать новую версию лучше всего из «вспомогательной» програмки, прилагаемой к основному файлу вашего «приложения». В случае обнаружения новой версии запускаем updator и он уже все сам сделает.
- Что будет делать апдейтор? Он, в случае обнаружения новой версии, будет закрывать основное «приложение», скачивать новое(Как? Это вам должно быть известно.) и копировать его вместо старого. Скачанный файл потом надо будет удалить.
Он поможет вам собирать пакеты обновлений, умеет обнаруживать обновления на вашем сервере, загружать их по FTP, HTTP, HTTPS, выводить информацию (вашу) об обновлении, подменять exe-шник, избавляя вас от заморочек с UAC-ом в Windows Vista/7.
Обновление программы Delphi
Источник: husl.ru
Delphi обновление программы самой себя
Подскажите как реализовать самообновление. Программа запускается, качает обновление и, по идее, переписывается поверх. Но прога запущена и не дает затереть исполняемый файл. Надо как-то закрыться, переписать и вновь запуститься что ли.
Участник клуба
Регистрация: 23.04.2009
Сообщений: 1,058
создай bat файл, перепеши сам себя, и удали bat
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
Programming.
Форумчанин
Регистрация: 13.03.2010
Сообщений: 198
With TProgrammersForum.Create do AddNewTopic(‘Title’,’Content. ‘);
Регистрация: 09.01.2008
Сообщений: 26,238
судя по всему, то, что предложил bitSoft — то, что надо. (не знаю, как там с платностью компоненты, но TMS грамотная и известная фирма.
Обновление прошивки тестера Delphi D-150 Китай для программы Автоком (Autocom)
хочу от себя добавить.
Программа запускается, качает обновление и, по идее, переписывается поверх. Но прога запущена и не дает затереть исполняемый файл. Надо как-то закрыться, переписать и вновь запуститься что ли. |
если проблема только в том, чтобы заменить запущенный EXE файл, то решение через BAT файл отлично решит данную проблему. Либо, сделать это так, как это делают многие программы (Adobe Acrobat Reader, например) — в комплект программы входит независимый exe файл, например, update.exe. Программа запускает его для проверки обновления. Если обновление есть — то этот самый update.exe выкачивает обновление (с временным именем), закрывает запущенный основной файл, заменяет основной exeшник, и прекращает работу.
Источник: www.programmersforum.ru
Обновление самого себя
Есть исходник программы которая обновляет файлы из интернета, т.е. если встречается файл с таким же именем, но размер разный то заменяет его.
Вот сам вопрос как сделать чтобы и мой ехе обновлялся т.е. как мне вывести его из памяти, заменить и перезапустить.
11.08.2010, 15:41
Let Me Show You
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Вы сказали Спасибо: 4
Поблагодарили 725 раз(а) в 682 сообщениях
Версия Delphi: 7, XE5
Репутация: 59586
сделать еще один и назвать его updater.exe
11.08.2010, 16:13
Регистрация: 29.10.2009
Сообщения: 446
Вы сказали Спасибо: 0
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 271
Как вариант,
В программе генерируется командный файл (*.cmd) и кладется возле программы. дальше программа запускает его и завершается.
В батнике следующий механизм. В начале пауза или ожидание завершения основной программы.Потом удаление старой версии, копирование новой и запуск новой. В самой программе, при старте всегда проверяешь, не лежит ли рядом с программой командный файл, если да, то удаляешь его.
11.08.2010, 19:44
Регистрация: 11.08.2010
Сообщения: 8
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
А можно по подробнее, как создать такой файл?
12.08.2010, 07:59
Регистрация: 29.10.2009
Сообщения: 446
Вы сказали Спасибо: 0
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 271
Что конкретно тебе не понятно?
12.08.2010, 10:51
Регистрация: 11.08.2010
Сообщения: 8
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
я бы хотел увидеть пример.
12.08.2010, 11:24
Регистрация: 29.10.2009
Сообщения: 446
Вы сказали Спасибо: 0
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 271
Готовое решение значит ждешь?
Вот кусок кода из проекта, писал его когда только начал вплотную изучать дельфи, должен помочь)
Последний раз редактировалось Asinkrit, 02.04.2011 в 20:20 .
13.08.2010, 10:38
Регистрация: 11.08.2010
Сообщения: 8
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
У меня возникла проблема. Не работает процедура close; , при закрытий моей формы она всё равно остаёться, если хочу вручную закрыть то выдаёт ошибку.
Последний раз редактировалось ADM, 13.08.2010 в 11:22 .
13.08.2010, 17:04
Регистрация: 29.10.2009
Сообщения: 446
Вы сказали Спасибо: 0
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 271
Я не телепат, что за ошибку выдает?
14.08.2010, 11:08
Регистрация: 11.08.2010
Сообщения: 8
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
ошибка просто связана с адрессом в памяти как я понял вот скрин
15.08.2010, 03:17
Регистрация: 29.10.2009
Сообщения: 446
Вы сказали Спасибо: 0
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 271
Теперь код покажи, что ты понаписал.
04.09.2010, 10:33
Регистрация: 11.08.2010
Сообщения: 8
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Вот кусок который как бы должен отвечать за обновление ехе:
04.09.2010, 18:33
Регистрация: 29.10.2009
Сообщения: 446
Вы сказали Спасибо: 0
Поблагодарили 5 раз(а) в 2 сообщениях
Репутация: 271
Close должен идти после метода ShellExecute.
04.09.2010, 22:25
Always hardcore!
Регистрация: 04.03.2009
Сообщения: 3,239
Вы сказали Спасибо: 150
Поблагодарили 139 раз(а) в 114 сообщениях
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
Очередной апдейтер для Ладвы
Чем готовые решения не устроили (некоторые даже open-source есть)?
__________________
Оставайтесь хорошими людьми.
VK id2634397, ds [at] phoenix [dot] dj
05.09.2010, 04:24
Регистрация: 11.08.2010
Сообщения: 8
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Так я их и использую, вот только само обновления как я понял здесь нет.
Переставил close всё равно такая ошибка.
Вот полностью вся процедура:
Источник: delphisources.ru