Обновление программного обеспечения на месте - PullRequest
0 голосов
/ 08 января 2010

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

Возможно ли это без особых хлопот? Я изучил технологию clickonce, но не думаю, что это именно то, что я ищу.

Как насчет того, как Firefox обновляет? Просто ждет, когда вы перезапустите программу, и уведомит вас, когда она будет обновлена.


ОБНОВЛЕНИЕ: Я не удаленно подключен к ПК пользователя. Эта программа запускается на сервере, и я удаленно и обновляю ее, пользователи запускают ее прямо с сервера через удаленный доступ.

ClickOnce не будет работать, потому что для этого требуется веб-сервер.

Ответы [ 8 ]

3 голосов
/ 08 января 2010

Рассмотрим MS API с BITS , просто используя bitsadmin.exe в скрипте или Windows Update Services .

3 голосов
/ 08 января 2010

У меня есть пример кода, который я сейчас не могу найти, но вы можете сделать что-то похожее на Firefox с пространством имен System.Deployment.Application .

Если вы используете класс ApplicationDeployment , вы сможете делать то, что хотите.

Из MSDN, этот класс ...

Программно поддерживает обновления текущего развертывания и обрабатывает загрузку файлов по требованию.

2 голосов
/ 08 января 2010

Хотя вы можете разработать свой код так, чтобы он сам изменялся (возможно, не в C #?), Это, как правило, плохая идея. Это означает, что вы должны перезапустить что-то, чтобы получить обновление. (В Linux вы можете заменить используемые файлы, однако обновление не произойдет, пока новые данные не будут загружены в память, т.е. перезапуск приложения)

Стратегия, используемая Firefox (фактически никогда не рассматривалась), хранит обновленный исполняемый файл в другом файле, который проверяется, когда программа начинает загружаться. Это позволяет программе перезаписать программу обновлением до того, как ОС заблокирует ресурс. Вы также можете сделать свою программу более модульной, чтобы ее части можно было «перезапустить» без необходимости перезапуска всей программы.

Как вы на самом деле это делаете, вероятно, предоставлено ссылками, предоставленными другими.

Редактировать :: В свете ответа Лассе В. Карлсена

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

2 голосов
/ 08 января 2010

Некоторые вопросы:

  1. Пользователи работают с программным обеспечением локально, но файлы находятся в сетевой папке на вашем сервере?
  2. Они удаленно подключаются к тому же серверу, к которому вы хотите подключиться, и выполняете его там?
  3. Если 2. они исполняют файлы, расположенные на сервере, или копируют их в «личную папку»?

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

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

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

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

1 голос
/ 08 января 2010

ClickOnce и Silverlight (вне браузера) поддерживают ваш сценарий, если мы говорим об обновлениях. Удаленный вход в систему вашего пользователя? Нету. И нет, насколько я могу судить, Firefox этого не делает ..

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

Edit: эта вещь "Я только что обновил, пожалуйста, перезагрузите", которая вам нравится, это один вызов метода для приложений Silverlight, работающих вне браузера. На данный момент я совершенно уверен, что это может быть путь для вас.

0 голосов
/ 08 января 2010
Is this possible without too much of a hassle?

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

0 голосов
/ 08 января 2010

Различные сценарии развертывания / обновления (для приложений .NET) обсуждаются с плюсами и минусами в Руководстве по архитектуре и дизайну интеллектуального клиента Microsoft . Хотя я немного староват, я считаю, что большинство из них сохранилось до наших дней, так как оно описывает скорее основные архитектурные принципы, чем технические детали. Существует PDF-версия, но вы также можете найти ее в Интернете:

Развертывание и обновление приложений Smart Client

0 голосов
/ 08 января 2010

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

Другим вариантом является приложение Silverlight OOB, но оно будет более трудоемким, если ваше приложение уже создано как клиентское приложение WinForms / WPF.

...