Автоматически проверяя на новую версию моего приложения

Согласно http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html формат «yyyy / mm / dd» решает обычные проблемы , Он говорит: «Придерживайтесь« YYYY / MM / DD »для строк даты, когда это возможно. Это универсально поддерживается и недвусмысленно. В этом формате все времена являются локальными». Я установил тесты: http://jsfiddle.net/jlanus/ND2Qg/432/ Этот формат: + избегает двусмысленности порядка дня и месяца, используя порядок ymd и 4-значный год + избегает UTC против локальной проблемы, не соответствующей формату ISO, с помощью косой черты + danvk, dygraphs , говорит, что этот формат хорош во всех браузерах.

22
задан Community 23 May 2017 в 12:17
поделиться

12 ответов

Я абсолютно рекомендовал бы просто сделать простой Запрос HTTP к Вашему веб-сайту. Все остальное обязано перестать работать.

я сделал бы HTTP-запрос GET к определенной странице на Вашем сайте, содержащем версию локального приложения.

как [1 110]

http://www.example.com/update?version=1.2.4

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

, Почему не только помещает статический файл с последней версией к серверу и позволяют клиенту решить? Поскольку можно хотеть (или потребность) управлять процессом. Возможно, 1.2 не будет совместимо с сервером в будущем, таким образом, Вы хотите, чтобы сервер вызвал обновление 1,3, но обновление от 1.2.4 до 1.2.6 могло быть неочень важным, таким образом, Вы могли бы хотеть подарить клиенту дополнительное обновление.

Или Вы хотите иметь разбивку по установленной основе.

Или что бы то ни было. Обычно, я учился, лучше сохранять столько же аналитики на сервере, потому что сервер - то, что Вы имеете окончательный контроль.

Разговор здесь с небольшим количеством опыта в поле, вот маленький предварительный просмотр того, что может (и быть - доверяют мне), пойдите не так, как надо:

  • Вашему Приложению будут препятствовать делать Запросы HTTP различными Персональными приложениями Брандмауэра там.
  • А значительный процент пользователей не будет иметь необходимых полномочий на самом деле получить движение процесса обновления.
  • , Даже если Ваши пользователи позволили старую версию мимо своего персонального брандмауэра, сказали, что инструмент будет жаловаться, потому что.EXE изменился и рекомендует пользователю не позволить новому exe соединяться (пользователи обычно выполняют пожелания своих средств обеспечения безопасности здесь).
  • В управляемых средах, Вы будете застрелены и повешены (не обязательно в том порядке) для загрузки исполняемого содержания от сети и затем на самом деле выполнения его.

Так для хранения повреждения максимально низко,

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

Это не забава сделать то, что Вы собираетесь сделать - особенно, когда Вы имеете дело с не технически склонные пользователи, как я имел к многочисленным временам.

38
ответ дан pilif 29 November 2019 в 03:29
поделиться

Ответ Pilif был хорош, и у меня есть большой опыт с этим также, но я хотел бы добавить что-то больше:

Помнят, что при запуске yourapp.exe, тогда "updater" попытается перезаписать yourapp.exe с новейшей версией. В зависимости от Вашей среды операционных систем и среды программирования (Вы упомянули C++ / QT, у меня нет опыта с теми), Вы будете не быть в состоянии перезаписать yourapp.exe , потому что это будет использоваться.

то, Что я сделал, создают средство запуска. У меня есть MyAppLauncher.exe, который использует файл конфигурации (xml, очень простой) для запуска "реального exe". Если новая версия существует, Средство запуска может обновить "реальный exe", потому что это не используется, и затем повторно запустите новую версию.

Просто имеют это в виду, и Вы будете в безопасности.

21
ответ дан Martin Marconcini 29 November 2019 в 03:29
поделиться

Martin,

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

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

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

Все еще: процесс является волосатым, и Вы лучше думаете дважды прежде, чем реализовать функциональность Автоматического обновления на платформе Windows, когда Ваше приложение имеет широкий фокус использования.

7
ответ дан pilif 29 November 2019 в 03:29
поделиться

в php вещь легка:

<?php
    if (version_compare($_GET['version'], "1.4.0") < 0){
        echo "http://www.example.com/update.exe";
    }else{
        echo "no update";
    }
?>

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

В Вашем приложении у Вас был бы этот псевдо код:

result = makeHTTPRequest("http://www.example.com/update?version=" + getExeVersion());
if result != "no update" then
    updater = downloadUpdater(result);
    ShellExecute(updater);
    ExitApplication;
end;

Не стесняйтесь расширять "протокол" путем определения чего-то, что Сценарий PHP мог возвратить, чтобы сказать клиенту, является ли это важным, обязательным обновлением или нет.

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

Ваши возможности довольно безграничны.

5
ответ дан pilif 29 November 2019 в 03:29
поделиться

Мое спокойное приложение просто использует QHttp для чтения крошечного XML-файла от моего веб-сайта, который содержит число последней версии. Если это больше, чем число текущей версии, оно дает опцию перейти к странице загрузки. Очень простой. Хорошо работает.

4
ответ дан Andy Brice 29 November 2019 в 03:29
поделиться

Я согласился бы с @Martin и ответом @Pilif, но добавил бы;

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

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

у Нас была система ЭПОСА, работающая приблизительно в 400 магазинах, и первоначально мы думали, что будет замечательно иметь обновления пятна программы и загрузить их (использование файла, содержащего номер версии, очень похожий на предложения, которые Вы имеете выше)... прекрасная идея. Пока все магазины не запустили их системы примерно в то же время (8:45-8:50am), и наш сервер был поражен, служа 20+Mb, загружают на 400 удаленных серверов, которые тогда обновили бы локальное программное обеспечение и вызвали бы перезапуск. Хаос - ни с кем, который в состоянии торговать в течение приблизительно 10 минут.

, Само собой разумеется, что это заставило нас впоследствии выключать 'проверку на обновления' функция и перепроектировать его, чтобы позволить магазинам 'задерживать' обновление до позже в тот же день.:-)

РЕДАКТИРОВАНИЕ: И если кто-либо от ADOBE читает - ради бога, почему проклятая Acrobat Reader настаивает на том, чтобы пытаться загрузить обновления и дерьмо, когда я просто хочу к fire-it-up прочитать документ? Это не достаточно медленно при запуске и чрезмерно увеличилось в размерах достаточно, как это, не тратя впустую еще 20-30 секунд моей жизни, ища обновления каждый раз, когда я хочу считать PDF?
РАЗВЕ ОНИ не ИСПОЛЬЗУЮТ СВОЕ СОБСТВЕННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ??!!! :-)

2
ответ дан robsoft 29 November 2019 в 03:29
поделиться

На сервере у Вас мог просто быть простой файл "latestversion.txt", который содержит номер версии (и, возможно, загрузите URL) последней версии. Клиент тогда просто должен считать этот файл с помощью простого Запроса HTTP (да, для портирования 80) для получения http://your.web.site/latestversion.txt , который можно тогда проанализировать для получения номера версии. Таким образом, Вам не нужен никакой необычный серверный код---, просто необходимо добавить простой файл к существующему веб-сайту.

1
ответ дан Anthony Williams 29 November 2019 в 03:29
поделиться

если Вы сохраняете свои файлы в каталоге обновления на example.com, этот Сценарий PHP должен загрузить их для Вас, учитывая запрос, ранее упомянутый. (Вашим обновлением был бы yourprogram.1.2.4.exe

$version = $_GET['version'];    
$filename = "yourprogram" . $version . ".exe";
$filesize = filesize($filename);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: post-check=0, pre-check=0");
header("Content-type: application-download");
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . basename($filename).'"');
header("Content-Transfer-Encoding: binary");

Это заставляет Ваш веб-браузер думать, что он загружает приложение.

1
ответ дан Peter Turner 29 November 2019 в 03:29
поделиться

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

0
ответ дан wvdschel 29 November 2019 в 03:29
поделиться

Самый простой способ заставить это произойти состоит в том, чтобы запустить Запрос HTTP, пользующийся библиотекой как libcurl, и заставить его загрузить ini или xml файл, который содержит интерактивную версию и где новая версия была бы доступна онлайн.

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

0
ответ дан 29 November 2019 в 03:29
поделиться

Я думаю, что простой XML-файл на сервере был бы достаточен для проверки версии только цели.

Вам была бы нужна тогда только учетная запись ftp на Вашем сервере и системе сборки, которая в состоянии отправить файл через ftp после того, как это создало новую версию. Та система сборки могла даже поместить файлы/zip установки на Ваш веб-сайт непосредственно!

0
ответ дан Marcin Gil 29 November 2019 в 03:29
поделиться

Если Вы хотите сохранить его действительно основным, просто загрузить version.txt на веб-сервер, который содержит целочисленный номер версии. Загрузите ту проверку по сравнению с последним version.txt, который Вы загрузили, и затем просто загрузите msi или установочный пакет и выполните ее.

[еще 111] усовершенствованные версии должны были бы использовать RSS, xml или подобный. Было бы лучше пользоваться сторонней библиотекой для парсинга RSS, и Вы могли включать информацию, которая отображена Вашему пользователю об изменениях, если Вы хотите сделать так.

В основном Вам просто нужна простая функциональность загрузки.

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

существует несколько коммерческих доступных решений автоматического обновления. Я оставлю рекомендации для тех к отвечающим сторонам других, потому что у меня только есть опыт в .net стороне с, Нажимают Once, и Updater Application Block (последний больше не продолжается).

0
ответ дан Alex Duggleby 29 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: