Как обновить программу delphi

Как правильно выполнить перезапуск программы?
Цель такая: нужно обновить программу.
Алгоритм такой: программа скачивает обновление, проверяет на валидность, обозначает как-то что доступно обновление (например пишет ключ в реестр) и перезапускает себя (как firefox, например). При запуске программа проверяет ключ в реестре, и, если доступно обновление — заменяет файлы новыми и дальше работает в штатном режиме.

Остается два узких места: как обновить сам exe-шник?
и как организовать перезагрузку?

но если первую проблему можно как-то обойти: сам exe-шник представляет из себя лоадер, который умеет обновлять основную программу и загружать ее и сам не обновляется. А во-вторых, его можно переименовать во время работы и записать новую версию (не знаю только всегда и везде ли это будет работать?),
то со второй что-то никак не справиться.

Подскажите пожалуйста, как решить данную проблему или укажите как правильно делают обновления программ. Не обязательно подробно объяснять, главное дать пинок в нужном направлении

Хорош ли новый релиз «2018 rev. 0», последняя версия 2021 г. к мультимарочному сканеру Delphi DS150E


Заранее благодарен.

Re: Перезапуск программы, обновление программы

От: misha_irpen
Дата: 28.04.08 11:29
Оценка:

Системы семейства NT позволяют переименовать исполняемый файл даже если он сейчас загружен. Можно плясать от этого (простейший способ потребует записи ключика в RunOnce и перезагрузки машины).

А вообще я бы написал маленький екзешничек без использования VCL, сжал его UPX-ом и вложил в ресурс оновного исполняемого файла программы (добавит всего килобайт 10 к размеру). После загрузки обновления, отпочковываем от себя этот файлик, запускаем его с нужными параметрами, а сами завершаемся. Файлик же, дожидается нашего завершения, выполняет обновление всего что нужно, снова запускает программу с «секретным» параметром и тихо завершается. Программа при запуске с этим параметром первым делом дожидается завершения загрузчика, удаляет его и дальше работает как обычно.

Можно ничего не прятать, а просто держать этот загрузчик все время в каталоге программы, но тогда его самого обновить будет сложнее (это должна будет сделать сама программа перед его запуском).

Re: Перезапуск программы, обновление программы

От: BDEsoft
Дата: 28.04.08 11:29
Оценка:

Здравствуйте, bsigr, Вы писали:

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

обновление прошивки delphi

Re: Перезапуск программы, обновление программы

От: Rius
Дата: 28.04.08 14:38
Оценка:

Здравствуйте, bsigr, Вы писали:

B>Как правильно выполнить перезапуск программы?
B>Цель такая: нужно обновить программу.
B>Алгоритм такой: программа скачивает обновление, проверяет на валидность, обозначает как-то что доступно обновление (например пишет ключ в реестр) и перезапускает себя (как firefox, например). При запуске программа проверяет ключ в реестре, и, если доступно обновление — заменяет файлы новыми и дальше работает в штатном режиме.

B>Остается два узких места: как обновить сам exe-шник?
B>и как организовать перезагрузку?

B>но если первую проблему можно как-то обойти: сам exe-шник представляет из себя лоадер, который умеет обновлять основную программу и загружать ее и сам не обновляется. А во-вторых, его можно переименовать во время работы и записать новую версию (не знаю только всегда и везде ли это будет работать?),
B>то со второй что-то никак не справиться.

Читайте также:
Самые интересные программы ТВ

B>Подскажите пожалуйста, как решить данную проблему или укажите как правильно делают обновления программ. Не обязательно подробно объяснять, главное дать пинок в нужном направлении
B>Заранее благодарен.
У меня работало так:

прога (exe), запускаясь, смотрит из какого каталога она запущена или в каком домене. если не из временного и не в домене, то копирует свой exe во временный каталог и запускает его, сама закрывается (это безоконная прога).

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

загрузившись в домене, прога создаёт класс, создающий уже основное окно приложения из dll. таким образом exe’шнику не требуются остальные dll до этого момента, он имеет минимум кода и малый объём.
этот класс также ждёт здесь выхода из программы, после выхода проверяет, не установлен ли флаг перезапуска программы, и если установлен — вызывает функцию Application.Restart().

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

p.s. что-то здесь явно можно упростить.

Источник: www.rsdn.org

Поддержка обновлений в программе

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

У кого-то есть свои может примеры, свои алгоритмы, но я расскажу какой прием именно я применяю. Что нам понадобится для этого — нам понадобится какой-нибудь фтп-сервер, где будет храниться наша обновленная версия программы, а также информация о текущей версии программы.

Это может быть не обязательно фтп-сервер, это может быть какой-нибудь файлообменник, но на все эти файлы (программу обновленную и файл с версией программы) обязательно должны быть постоянные ссылки. Если есть фтп-сервер, то на нем необязательно должны быть постоянные ссылки, там можно создать папку и просто сканировать ее на файлы, которые там есть.

Тем более, если кто-то занимается серьезно разработкой программного обеспечения и распространяет его, то наверняка должен быть у данного разработчика сайт, а вместе с ним и фтп, так что для обновлений я думаю Вам не жаль будет 50 мб свободного места на Вашем фтп-сервере, а то и меньше. Далее мы создаем на нашем фтп-сервере папку update, например, в которой будет находиться текстовый файл и сама обновленная программа (файл программы с последней версии).

В самом текстовом файле у нас будет храниться текущая версия нашей программы, кроме этого в одном текстовом файле, если у Вас несколько программ, в которых необходимо сделать обновление программы, можно хранить версии для всех Ваших программ. После того, как у нас создана папка на фтп-сервере и там подготовлен файл, где хранятся наши версии программ, нам необходимо записать туда текущую версию программа в данный текстовый файл. После этого в нашей программе необходимо также написать версию программы, например записать в какой-нибудь TLabel, который находится во вкладке о программе и на нем будет написана текущая версия программы. Можно хранить версию в программе в каком-нибудь текстовом файле, в ini-файле, в реестре, без разницы, кому как удобно это делать.

Читайте также:
Почему не открывается программа word на компьютере

В итоге у нас получается следующее: есть программа, на фтп-сервере есть текстовый файл, в котором хранится текущая версия программы, например 1.0.1, в самой программе (в реестре, в ini-файле) также записана текущая версия программы — 1.0.1. Что мы делаем дальше, дальше мы добавляем пункт меню или кнопку в программу, что-то наподобии — «Проверка обновлений» и по нажатию на эту кнопку мы будем сверять версию, что находится на сервере, с версией, которая находится в программе, если они совпадают, то выводим сообщение о том, что у Вас самая новая версия программы, если они не совпадают, то выводим сообщение о том, что появилась новая версия программы и показываем ссылку на скачку, либо говорим о том, что можно скачать на сайте разработчика новую версию программы. Насчет ссылки на программу, можно ее сразу вшить в программу, если делать ее постоянной, например вот такой https://site/update/program.exe, то есть на сервере придется просто заменять exe файл программы, а ссылка у нас будет постоянной, можно просканировать папку на фтп-сервере на наличие exe-файлов и выдать тот файл, который там находится, но в данном случае мы сделаем как постоянная ссылка на файл программы.

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

Для получения версии программы на фтп-сервере мы будем использовать компонент TIdHTTP, кроме этого нам понадобится кнопка TButton, по нажатию на которую и будет производиться проверка обновлений. Что происходит с программами, которые у пользователей. Допустим, у нас на сервере записана версия программы 1.0.1, в программе также записана версия программы 1.0.1, мы выпускаем новую версию программы, в самой программе мы меняем версию программы (в текстовом файле, в TLabel, просто записать как обычной константой), например, на 1.0.2, на сервере делаем тоже самое, в текстовом файле мы ставим 1.0.2. Далее у пользователя, у которого версия программы 1.0.1, он нажимает на кнопку «Проверить обновление», сверяются версии на фтп-сервере и в программе, естественно они не совпадают и пользователю предлагают скачать новую версию программы.

Далее, когда он скачивает, то в новой версии программы вшита версия программы, точно такая же как и на сервере, в итоге он уже не сможет ее обновить, пока не выйдет следующая версия, и пока не измениться версия на фтп-сервере. Итак, я написал следующий код программы, который проверяет наличие обновлений

procedure TForm1.Button1Click(Sender: TObject); var version:WideString; begin try version:=IdHTTP1.Get(‘https://devdelphi.ru/update/version.txt’); if version=Label1.Caption then begin Application.MessageBox(‘У Вас самая новая версия программы’,’Внимание’,MB_OK); end else begin Application.MessageBox(‘Появилась новая версия программы, ее можно скачать’+#13#10+’https://devdelphi.ru/update/project.exe’,’Внимание’,MB_OK); end; except on e:Exception do //-//-//-//-//-// end; end;

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

Читайте также:
Какая программа скачивает фильмы на Айфон

Вообщем как-то так я делаю поддержку обновлений в своих программах, вроде бы меня все устраивает.

Похожие записи:

Всем доброго времени суток. Давненько я не писал ничего про MapWindow GIS в Delphi. Может оно и к лучшему, так как летом вышла очередная новая версия данного ActiveX-компонента, в которой наконец-то появилась поддержка Google-карт. Мы уже с Вами рассматривали .

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

Итак, в свое время я делал для себя программу, которая должна была считывать текущие настройки сети и показывать их в программе. Далее, я мог эти настройки сохранить в файл, кроме этого, я мог ввести настройки сети (TCP/IP — ip-адрес, маску, dns-сервера) вручн.

Источник: devdelphi.ru

Обновление AutoCom Delphi с версии 2013.3 до 2014.1

Наконец-то вышло полноценное обновление программы до версии 2014.1!

Данное обновление необходимо ставить строго на версию 2013.3. Как устанавливать и активировать программу мы уже писали в этой статье. Если у вас установлена версия 2013.3.3, рекомендуем удалить программу с компьютера и установить с нуля 2013.3. Итак, берём AutoCom Delphi 2013 Release 3 (2.13.3). На время всей установки (после скачивания необходимых файлов) отключаемся от интернета и отключаем антивирусные программы.

1) Скачиваем архив с обновлениями тут. Распаковываем.

2) Копируем с заменой файлы из папки в папку с установленной программой
C:Program FilesDelphi DiagnosticsDS150E (New VCI) — для легковых автомобилей.
C:Program FilesDelphi DiagnosticsDS150E (New VCI Heavy Duty) — для грузовых автомобилей (если у вас такая установлена).

3) Скачиваем архив с патчами тут. Распаковываем.
Всё содержимое папки «Patch 2014.1 DELPHI AUTOCOM (CAR and TRUCК)» копируем с заменой в те же папки с установленной программой, как делали это в пункте 2.

4) Запускаем программу, серийный номер и аппаратный ключ оставляем таким же, какой он был при активации версии 2013.3 (для легковых автомобилей 100251 — EGDFZJFAVQED, для грузовых 100251 — XYVRVNHAGEHD). На следующем шаге жмём Start и сохраняем файл активации fileactivation.xml на рабочий стол.

5) Запускаем файл «Autocom Delphi Keygen 2014R1» из папки «Keygen 2014.1 DELPHIAUTOCOM (CAR and TRUCК)», выбираем сохранённый на рабочем столе файл fileactivation.xml, видим сообщение об успешной активации.

6) Возвращаемся в нашу программу, жмём Start — No и выбираем на рабочем столе наш уже активированный файл. Программа активирована! При заставке вы будете видеть версию 2013 Release 3, но когда программа откроется, вы увидите, что версия обновлена.

AutoCom Delphi 2014.1

7) Подключаем сканер к диагностическому разъёму автомобиля и к USB порту компьютера. Заходим в Настройки — Мастерская Workshop — Установки оборудования. Проводим тест. Если программа покажет «Тест ОК!», ничего больше обновлять не нужно! Если программа попросит обновить микропрограммное обеспечение адаптера, в правой колонке нажимаем «Обновить».

8) Если программа будет предлагать вам обновиться до какой-либо версии, отказываемся! Иначе активация слетит.

Источник: elm327rus.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru