Самообновляющееся приложение - философия

15

Это философский вопрос.

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

  1. Как и iTunes , он проверяет, есть ли новая версия, и предлагает пользователю загрузить новую версию. Если это так, он загружает исполняемый файл полной установки (в данном случае, файл установщика Windows (.msi)), который устанавливает полную версию (не просто обновление до предыдущей версии - слишком много, чтобы управлять, если существует несколько версий) , Итак, скажем, это версия 10.1.1 - независимо от того, устанавливаете ли вы новую или обновляете, вы используете один и тот же файл. После загрузки он инструктирует пользователя закрыть приложение и запустить файл установки самостоятельно.

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

Проблемы с # 2: много проблем, связанных с закрытием программы, так как программа может открывать другие программы ( Outlook и Excel ), или что, если пользователь был в середине чего-то. Кроме того, для обеспечения безопасности вам необходим доступ локального администратора для установки, что если у вас его нет? В более поздних версиях Windows вы не можете просто переопределить безопасность человека.

Проблемы с # 1: некоторые люди считают, что это будет слишком сложно, слишком много усилий для конечного пользователя.

Я бы предпочел пойти с № 1, потому что это сэкономит 80-120 часов на моем проекте, и его проще внедрить и поддерживать. Тем не менее, у нас есть люди, которые испытывают сильные чувства со всех сторон.

Какова лучшая практика для такого рода вещей?

Шеннон Дэвис
источник
Я не уверен, что это философски, похоже, что она ищет решение для меня.
Так что не стоит задавать вопросы о дизайне / архитектуре здесь?
У меня вопрос, почему # 2 требует, чтобы программа закрылась и перезапустилась? Если это обновление для системы безопасности, это понятно, но обычный пользователь закрывает и снова открывает программу, по крайней мере, один раз в день, если не больше, так почему бы не установить ее в фоновом режиме, пусть пользователь запускает программу, используя более старую версию в памяти , а затем, когда они перезапускают его, используйте новую версию, которая была установлена. Нет суеты, нет хлопот.
Майк С
@Mike S: это невозможно в Windows (не может перезаписать исполняемые файлы, которые работают), и даже в Linux это не очень хорошая идея (если вы откроете другой экземпляр, у вас будет один, выполняющий старый код, и один, выполняющий новый код - если есть какой-либо IPC, это еще хуже)
Дин Хардинг
Из опыта: если вы проверяете обновления, не заставляйте вашу программу делать это ежедневно в полночь или в 3 часа дня. Это кажется разумным, но вы заканчиваете DDOS'ом свои собственные серверы. Просто добавьте до 3600 секунд случайности; это не что срочно.
MSalters

Ответы:

20

Лично мне скорее нравится подход Google Chrome. Базовый каталог с лаунчером и подкаталогами для каждой установленной версии программного обеспечения. Средство запуска просто ищет самый большой номер версии, использует его и удаляет старые версии по мере необходимости. Время от времени задача обновления запускается для загрузки и создания новых каталогов. Когда новые версии установлены, работающее приложение запрашивает перезапуск, чтобы использовать новую версию.

Кусочки бекона
источник
4
+1 за указание на хорошее поведение Googles. В отличие от Adobe Acrobat Reader, который каждый второй день, по-видимому, требует срочных исправлений для установки и постоянно мешает работе.
Инго
Мне тоже нравится такой подход. Недостатком является то, что он работает только для пользовательских установок, которые не требуют повышения прав. Если у вас есть запрос на повышение прав, не имеет значения, нужно ли вам еще пару кликов для выполнения обновления (он больше не молчит).
@Cosmin, если вы не хотите использовать% appdata%, вы можете использовать% ProgramData% для хранения загруженных файлов. Более философски правильным способом было бы сохранить архив там, а затем повысить его до следующей запуска программы.
Бекон Бит
ЛЮБИТЕ этот ответ, и я кладу его в свой задний карман (на данный момент загрузка в стиле «Itunes» нашла широкое применение по причинам экономии средств).
Шеннон Дэвис,
3

Не следует создавать ненужные записи автозагрузки для проверки обновлений, таких как Adobe Flash Player (их сложно отследить, и я не могу найти способ отключить проверки ...) или iTunes. Это раздражает пользователя (гиков, в любом случае). Лучшим вариантом будет проверка обновлений при запуске приложения, как это делает Firefox .

Простое ненавязчивое "Установить обновления?" окно не будет раздражать пользователей. Пусть он обновляется в фоновом режиме, пока пользователь выполняет другие действия, а затем автоматически запускает ваше приложение.

Только обязательно включите опцию:

Проверьте наличие обновлений по адресу:

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

Или что-то подобное.


Если это стоит усилий, я бы сказал, пойти на это. Это ваше решение.

Матин Улхак
источник
2

Я думаю, что вы хотите "ClickOnce" настройки.

http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

ClickOnce - это технология развертывания, которая позволяет создавать самообновляющиеся приложения для Windows, которые можно устанавливать и запускать с минимальным взаимодействием с пользователем. Развертывание ClickOnce устраняет три основные проблемы в развертывании:

Сложности в обновлении приложений. При развертывании установщика Microsoft Windows при каждом обновлении приложения пользователь должен переустанавливать все приложение; с развертыванием ClickOnce вы можете предоставлять обновления автоматически. Загружаются только те части приложения, которые были изменены, а затем полностью обновленное приложение переустанавливается из новой параллельной папки.

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

Разрешения безопасности. Развертывание установщика Windows требует административных разрешений и допускает только ограниченную установку пользователя; Развертывание ClickOnce позволяет пользователям без прав администратора устанавливать и предоставлять только те разрешения Code Access Security, которые необходимы для приложения.


источник
Это был не вопрос плюсов и минусов клика один раз и MSI (к которому многие из ваших выводов неверны и / или неполны), а скорее вопрос лучших практик для автоматического обновления решений.
Кристофер Пэйнтер
Я все равно ценю эту информацию, и я поделюсь ею с разработчиком, чтобы узнать, рассматривал ли он ее как вариант - возможно, он думал, что ему придется разработать процесс обновления самостоятельно.
Ну, Кристофер, возьми это с MS, это прямо из MSDN. Это действительно полезный комментарий тоже.
Когда это кодирует к технологиям развертывания, это никогда не удивляет меня, когда кто-то публикует на MSDN это неправильно. Очень немногие из нас, эксперты, действительно понимают это.
Кристофер Пэйнтер
2

Я лично оценил приложения, которые делают что-то похожее на платформу Sparkle . Я предполагаю, что это только Mac, но по сути он делает следующее (вне головы - я предполагаю, что поведение можно отрегулировать).

  1. Проверить наличие обновлений (обычно при запуске приложения)
  2. Если он есть, отображается отдельное окно с красиво отформатированным журналом изменений.
  3. Затем пользователь может пропустить эту версию, установить ее или выбрать напоминание позже
  4. Если он решает установить приложение, индикатор изменений отображается под журналом изменений.
  5. После загрузки пользователь может решить выйти из приложения и установить сразу или установить после выхода из приложения

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

sebastiangeiger
источник
1

Я бы сказал, что вы действительно должны знать своего пользователя. Если они сообразительны и или очень заинтересованы в том, чтобы идти в ногу со временем, # 1 сработает.

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

Время придет либо от разработки (# 2), либо от поддержки (# 1).

maple_shaft
источник
1

Что насчет этого?

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

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

maaartinus
источник
1

Почему не что-то посередине?

Запрашивать загрузку (или сделать опцию «загрузить автоматически»), после окончания подсказки установить загруженное обновление (выполнить MSI-файл). Таким образом, вы сводите на нет недостаток # 2 (закрытие в середине работы пользователя) и при этом сохраняете комфорт за счет еще одного клика.

Диалог « Закрыть и установить обновление? » Должен быть легкодоступным (но не раздражающим), когда пользователь сначала отказывается. Имея "Launch <имя программы>?" флажок в конце .msi будет почти как # 2 с не очень больше работы

@ security
Программы в современной Windows могут запрашивать разрешение на выполнение действий, требующих прав администратора (пользователю отображается приглашение, где он вводит пароль администратора, а затем выбирает «да / нет», предоставлять ли разрешение).

NoxArt
источник
1

У меня есть 124 Ломбарда, которые используют мое настольное приложение Pawnshop Management. Всякий раз, когда у меня появляется новое обновление, я рассылаю им по электронной почте сообщение, информирующее об этом обновлении и его деталях. Затем у них есть возможность отправить его по FTP, зайдя на мой сайт. У них также есть возможность откатить обновление. Мой сайт также отслеживает каждую установленную версию ломбардов.

Фрэнк Р.
источник