Последняя версия DataExpress 3 beta от 9 августа 2020 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Расширения
ИзображениеИзображениеИзображение

Лаунчер для DataExpress с функционалом обновления программы.

Полезное от пользователей DataExpress
wowsab
Новичок
Сообщения: 38
Зарегистрирован: 13 апр 2017, 07:57

Лаунчер для DataExpress с функционалом обновления программы.

Сообщение wowsab » 07 ноя 2017, 09:32

Здравствуйте.
Каждый системный администратор сталкивался с вопросом обновления ПО. Случай с DataExpress - не исключение. Новые версии выходят регулярно, исправляются ошибки и т.д.
По этому решил поделиться с вами своей наработкой - лаунчер для DataExpress с системой автоматического обновления программы.
Внимание! Обновление вы готовите самостоятельно! Лаунчер не привязан к форуму.

Принцип работы:
Лаунчер читает содержимое файла version.ini и сравнивает его с содержимым файла check.ini на вебсервере.
Если версия, указанная в файле check.ini выше - читается содержимое файла file.ini и скачивается архив обновления, распаковывается (с заменой файлов) и запускается DataExpress.

Подробное логирование происходит в файл log.txt в директории update клиента.

Для функционирования лаунчера необходимо:

Код: Выделить всё

1. Простой веб-сервер, на котором вы будете выкладывать обновления (к примеру lighttpd)
2. Установленый лаунчер в папке с программой. Запуск DataExpress производится через лаунчер автоматически после проверки.

Установка:

Код: Выделить всё

1. Скопировать содержимое каталога "клиент" в папку с DataExpress
2. Скопировать содержимое каталога "сервер" в папку Вашего вебсервера.

Настройка и выпуск обновления.

Код: Выделить всё

1. Настроить клиента - в каталоге update в файле update.ini прописать адрес директории на вебсервере, в которой находится файлы из папки "сервер". Не забываем про заголовок "http://" и завершающий слеш "/"
### Правильно: http://test.ru/555/
### Не правильно: test.ru/555

2. На сервере - создать zip архив обновления.

3. На сервере - в файле check.ini прописать номер версии. Для того, чтоб работало обновление необходимо, чтоб номер версии был численно выше чем значение в файле version.ini клиента. (По умолчанию в version.ini установлено значение 001)

4. На сервере - прописать имя архива обновления в файле file.ini

##########
Для выпуска новой версии - повторить с пункта 2 по пункт 4.
##########


Данные указанные в ini файлах по умолчанию - действительные - вы можете проверить их в работе просто запустив лаунчер. Версия программы изменится на DataExpress 3 beta от 15 ноября 2017 года

#########
Для подготовки лаунчера использовалось свободное ПО - wget для Windows и 7-zip.
#########

Скачать http://sakhmedpom.ru/share/out/launcher.zip

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3352
Зарегистрирован: 13 апр 2017, 08:57
Поблагодарили: 6 раз
Контактная информация:

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение YurAnt » 07 ноя 2017, 09:42

Интересная фишка. Можно в принципе и без веб сервера обойтись... И думаю даже без wget-а.

wowsab
Новичок
Сообщения: 38
Зарегистрирован: 13 апр 2017, 07:57

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение wowsab » 07 ноя 2017, 09:55

YurAnt писал(а):Интересная фишка. Можно в принципе и без веб сервера обойтись... И думаю даже без wget-а.


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

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3352
Зарегистрирован: 13 апр 2017, 08:57
Поблагодарили: 6 раз
Контактная информация:

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение YurAnt » 07 ноя 2017, 10:06

wowsab писал(а):если брать из шары, то можно было и без него, но делал с расчётом "выездных" пользователей - в VPN всех пихать ради шары - кощунство.
Я не о шаре. Можно сделать намного проще. Сейчас дата выпуска на сайте формируется простейшим скриптом:
<?php $stat = stat('files/dx3bsetup.exe');echo date('d.m.Y', $stat['mtime']);?>
т.е. - можно сделать проверку запрашивая данные напрямую с сайта. Вместо wget можно использовать wininet - отпадает еще одна "ненужная" приблуда. Ну и в принципе все операции можно производить самой DX и клиентский лаунчер как таковой нужен будет чисто для операции запуска инсталятора после закрытия программы. А может и не нужен вовсе, возможно достаточно будет vbs скрипта в три строки, который так же может формироваться и запускаться из DX и его задачей будет дождаться завершения работы и запустить скачанный инсталятор.
Короче говоря - можно сделать такой модуль для DX и вызывать при запуске.

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3352
Зарегистрирован: 13 апр 2017, 08:57
Поблагодарили: 6 раз
Контактная информация:

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение YurAnt » 07 ноя 2017, 10:18

Можно это использовать: http://mydataexpress.ru/latest_version.php

wowsab
Новичок
Сообщения: 38
Зарегистрирован: 13 апр 2017, 07:57

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение wowsab » 07 ноя 2017, 10:59

YurAnt писал(а):Можно это использовать: http://mydataexpress.ru/latest_version.php


Вы правы, но тут есть несколько минусов.
1. Пользователи сидящие в AD - просто банально не смогут установить инсталятор (не хватит прав на исполнение). Зависит конечно от политик самого AD, но любой адекватный админ это дело ограничивает)))
2. Опять же, любой адекватный админ если не хочет потерять "что - либо" - сначала наказывает обновление "на себя", проверяет на тестовой базе, а только после этого выкладывает в паблик. На это лаунчер и рассчитан - скачать обнову, проверить все, сформировать архив обновления и выложить в патч. Не хочу никоим образом обидеть автора - просто кредо "сначала проверить, потом выложить" выработалось как раз после потери боевой 6-ти летней базы в результате неудачного обновления с сайта разработчика (Привет 1С!!!). Кстати по этой причине и решил перейти на dataexpress :-)
3. В карму wget-а - опять же, считаю что лучше использовать уже готовое отлаженное решение (тем более свободное), чем городить собственный огород, отлаживать ошибки и ловить try - catch исключения.

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

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3352
Зарегистрирован: 13 апр 2017, 08:57
Поблагодарили: 6 раз
Контактная информация:

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение YurAnt » 07 ноя 2017, 11:38

wowsab писал(а):1. Пользователи сидящие в AD - просто банально не смогут установить инсталятор (не хватит прав на исполнение). Зависит конечно от политик самого AD, но любой адекватный админ это дело ограничивает)))

Так ведь можно с сайта и zip портабельный скачать, верно?
wowsab писал(а):"сначала проверить, потом выложить"
Логично. Но если допустим, у нас имеется процедура автообновления с сайта, к этому можно попробовать прикрутить архивацию предыдущей версии и возможность отката. Кучеряво конечно, но как вариант...
wowsab писал(а):В карму wget-а - опять же, считаю что лучше использовать уже готовое отлаженное решение (тем более свободное), чем городить собственный огород, отлаживать ошибки и ловить try - catch исключения.

Так вроде без wget-а работает:

Код: Выделить всё

function URLDownloadToFile(pCaller: cardinal; URL: PChar;
FileName: PChar;Reserved: cardinal; lpfnCB : cardinal): cardinal;
external 'URLDownloadToFileA@urlmon.dll stdcall';

function DeleteUrlCacheEntry(lpszUrlName:PChar):cardinal;
external 'DeleteUrlCacheEntry@wininet.dll stdcall';

procedure DownloadAndInstallUpdate(Sender:TObject);
begin
DeleteUrlCacheEntry('http://mydataexpress.ru/files/dx3bsetup.exe');
Application.ProcessMessages;
if URLDownloadToFile(0, 'http://mydataexpress.ru/files/dx3bsetup.exe',
PChar(GetTempDir+'dx3bsetup.exe'), 0, 0)=0 then
 begin
  ShellExecute('',GetTempDir+'dx3bsetup.exe','','',5)
  end
 else
 msgbox('Ошибка','Загрузка обновления не удалась.');
end;

procedure Form_Create;
begin
 dxButton1.OnClick:=@DownloadAndInstallUpdate;
end;

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

wowsab
Новичок
Сообщения: 38
Зарегистрирован: 13 апр 2017, 07:57

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение wowsab » 07 ноя 2017, 12:38

Честно говоря не видел портабельный зип на сайте.

Архивация - откат это хорошо. Но тогда сначала надо делать архив базы -> архив проги. Как-то так)

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

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3352
Зарегистрирован: 13 апр 2017, 08:57
Поблагодарили: 6 раз
Контактная информация:

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение YurAnt » 07 ноя 2017, 13:04

URLDownloadToFileA поменять только на что-то другое надо бы. Асинхронного режима нет и висяк при скачивании в одном потоке.
В принципе с архивацией можно тоже подумать. Вижу, наклевывается комплексное решение... :)

wowsab
Новичок
Сообщения: 38
Зарегистрирован: 13 апр 2017, 07:57

Re: Лаунчер для DataExpress с функционалом обновления программы.

Сообщение wowsab » 07 ноя 2017, 13:20

YurAnt писал(а):URLDownloadToFileA поменять только на что-то другое надо бы. Асинхронного режима нет и висяк при скачивании в одном потоке.
В принципе с архивацией можно тоже подумать. Вижу, наклевывается комплексное решение... :)

UrlOpenStream. Но надо обработать нотфикацию о приходе данных.
Хотя проще воспользоваться libcurl ну или опять же wget :-)