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

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

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

Сообщение slyubez » 09.10.2015 16:03:26

Видел как некоторые чудаки ставятся в \AppData\Roaming или \AppData\Local

Многие популярные программы пишутся нынче именно туда - Chrome, Firefox, Viber и.т.д. А в PF остается даунлодырь.
slyubez
постоялец
 
Сообщения: 180
Зарегистрирован: 31.03.2015 08:44:07

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

Сообщение Alex2013 » 11.10.2015 17:11:40

На каком-нить хакерском форуме это наверное бы оценили

Причем тут "кулхакеры" ?
Тут скорее вспоминается не всегда адекватное требование "публиковать(или "подарить" заказчику ) исходники ... Если вся основная логика и красоты интерфейса будет упрятана в скрипт то вполне можно исходники пустой оболочки выкладывать где угодно "Нате ешьте !" :mrgreen: Особенно если скрипты идут вместе с данными ... (БД + Экспертная система например ) На вредное "Дай все!" честно спрашиваешь а "Клочь от квартиры где деньги лежат не хотите ?"

Переход исходников оболочки в собственность фирмы из которой думаешь уйти тоже легко обходится ...
говоришь "пока ! " - достаешь *из фондов радио" другую версию оболочки и продолжаешь работу над успешным проектом !
Alex2013
долгожитель
 
Сообщения: 3140
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Scuer » 01.09.2016 19:50:46

Я долго думал как реализовать данную возможность.
Но тут куча нюансов
1) Как проверять выпуск новой версии
2) Если есть то как скачать и заменить старую

И вот что у меня вышло

Код: Выделить всё
//Auotoupdate
procedure TConnectForm.FormShow(Sender: TObject);
var
  //Check version variables set
  version: WideString;
  curver: UnicodeString;
  //Info message variable set
  Reply, BoxStyle: integer;
begin
  //Version check
  curver := '2.111';
  version := IdHTTP1.Get(updhttp);
  //If ok exit from and continue
  if version = curver then
  begin
    exit;
  end
  //In new version show update message
  else
  begin
    BoxStyle := MB_ICONQUESTION + MB_YESNO;
    Reply := Application.MessageBox('Появилась новая версия программы !' + #13#10 +
      'Нажмите YES для обновления ...' + #13#13 +
      'после обновления ПЕРЕЗАПУСТИТЕ ПРОГРАММУ ', 'Внимание', BoxStyle);
    //If yes = update (launch bat file for update)
    if Reply = idYes then
    begin
      ShellExecute(0, nil, PChar('cmd'), PChar('/c update.bat'), nil, 1);
      ConnectForm.Close;
    end
    //If no exit from and continue
    else
      exit;
  end;
end;     


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

С батником всё просто, я использую curl иду на фтп, закачиваю новую версию, делаю бэкап старой и обновляю.
Думаю написать такой батник для винды сможет любой за 10 мин, тут постить нет необходимости.
Вот и всё, велком новая версия )))
Scuer
новенький
 
Сообщения: 12
Зарегистрирован: 01.09.2016 15:07:09

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

Сообщение Sharfik » 01.09.2016 21:53:46

Последние мое виденье - программа которая самостоятельно обновляется или проверяет обновление, и мучает пользователя уведомлениями - идет в помойку.
Автообновление путь к ухудшению качества, безответственности и постоянным багам в программах. Пока программа сама обновляется - стабильности на рабочем месте быть не может.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 808
Зарегистрирован: 20.07.2013 01:04:30

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

Сообщение pupsik » 01.09.2016 22:32:15

Sharfik а столь великолепный chrome? :mrgreen:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Sharfik » 01.09.2016 23:48:50

pupsik писал(а):chrome

не пользуюсь, что это?)))
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 808
Зарегистрирован: 20.07.2013 01:04:30

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

Сообщение pupsik » 02.09.2016 02:50:37

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

А вы... эх...
идет в помойку
:lol:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение DYUMON » 02.09.2016 05:46:58

Приличная программа покажет пользователю что появилась новая версия, и предложит обновится с возможностью закрыть окно, не приличная вроде windows 10 в тихую как крыса начнет качать все подряд.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

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

Сообщение Scuer » 02.09.2016 11:33:25

Да я согласен с DYMON , вот смотрим на Windows и что видим (сама винда обновляется ну согласен её давно пора в топку )) ). Skype, Acronis, VLC - да любая норм прога обновляется и при этом использует свой updater (у меня батник(может это и не совсем правильно в целях безопасности и стабильности) но всё же.
Да в норм проге, того что я пока не реализовал должна быть галочка (не обновлять, мне и так всё норм). Хотя скайпу на эту галочку до одного известного места ))

Минус моей системы это сам батник
1) Вот продвинуты пользователь решил позабавится, а тут все карты в руки и сервер фтп и логин и пароль. Дальше продолжать думаю не стоит
2) Вот ламо решил полазить по батнику - вывуд ( 5 мин и крики, а у меня не обновляется)

Поэтому думаю что пора писать свой updater вместо батника. Зачем так, а всё просто. (Программа открыта, решили обновить, скачали новую версию и ....) Терминируем прогу и усё. Вот для того чтоб решить всё одним махом такой вот вариант. Запускаем updater и наф основною прогу, она своё уже всё сделала )))
Scuer
новенький
 
Сообщения: 12
Зарегистрирован: 01.09.2016 15:07:09

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

Сообщение azsx » 02.09.2016 11:56:49

1) Вот продвинуты пользователь решил позабавится, а тут все карты в руки и сервер фтп и логин и пароль. Дальше продолжать думаю не стоит
2) Вот ламо решил полазить по батнику - вывуд ( 5 мин и крики, а у меня не обновляется)

1. логично, что фтп акк у вас только на чтение, верно? Хотя я всё равно не понимаю, почему вы просто по хттп не качаете.
2. батник против неопытного пользователя надо сделать только на чтение.
Вывод верный, надо написать свой модуль обновления, раз готового нет. Просто ведь, проверить, что есть изменения, скачать архив, закрыть основную программу, распаковать с заменой. Вот если вы новые dll в систем копируете, или реестры правите - тогда сложнее.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

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

Сообщение Лекс Айрин » 02.09.2016 12:19:06

Scuer писал(а):Да я согласен с DYMON , вот смотрим на Windows и что видим (сама винда обновляется ну согласен её давно пора в топку )) ). Skype, Acronis, VLC - да любая норм прога обновляется и при этом использует свой updater (у меня батник(может это и не совсем правильно в целях безопасности и стабильности) но всё же.


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

azsx писал(а):2. батник против неопытного пользователя надо сделать только на чтение.

Еще лучше, после работы проги доставать его из самой проги. Даже неопытный пользователь может додуматься (нагуглить) как его подшаманить.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение Scuer » 02.09.2016 12:23:04

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

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

Вывод да, пока токо руки не дошли, написать свой модуль обновления.
Логика проста, основная прога видит изменения, закрывается и запускает updater, закрывая после саму себя. Да и всё. Скачать архив, распаковать с заменой. проверить на кеш сумму на вся случай и создать бэкап.

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

То что при этом мы терминируем процесс одновременно у всех пользователей мне неважно, хотя может и не верно это, но вопрос как закрыть все копии программы которые запущены? Что не пробовал не отрабатывает, закрывает только одну копию ((
Scuer
новенький
 
Сообщения: 12
Зарегистрирован: 01.09.2016 15:07:09

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

Сообщение azsx » 02.09.2016 12:50:59

Просто по http думал, но у меня как такового http под мой софт с описанием для чего что и зачем нет.

как бы описание не нужно, достаточно пустого index.html + файла update.zip на апаче. Если файл есть - качаем, обновляем. Если нет - то нет. Это про безопасность по фтп доступа, если боитесь, что кто-то подменит исходники.
как закрыть все копии программы которые запущены?

надо поставить в программе таймер, по нему отверять какое нибудь событие. Например, в каталоге появился файл obnovlenie.txt - если файл появился, надо закрыться.
Но это явно не верный путь, а потом два юзера одновременно запустят прогу на хосте, кто первее будет обновлять? Или оба???
Для терминального варианта - я бы посадил обновление по крону ночью. То есть имеется каталог my_program. По крону пишу в него файл obnovlenie.txt, начинаю пытаться переименовать каталог на old_my_program. Как только получилось, распаковываю новую программу в my_program, старый каталог архивируем. Конечно, безумие, а не способ.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

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

Сообщение Scuer » 02.09.2016 14:07:06

Ну вариант рабочий )) Спасибо за совет. Осталось всё же сесть, подумать о том что пятница, выпить кофе и за часик не спеша наколдовать updater, думаю это решение самое верное. Всем спасибо за то что поделились мыслями и опытом по поводу этой, довольна актуальной теме. 8)
Scuer
новенький
 
Сообщения: 12
Зарегистрирован: 01.09.2016 15:07:09

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

Сообщение Padre_Mortius » 02.09.2016 21:44:13

Scuer, была реализация с выложенным на сервере текстовым файликом с версией программы. При запуске происходила проверка на совпадение версии. Если версия не совпадала, то дальше предлагалось обновить программу.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 233

Рейтинг@Mail.ru