2009-07-07 3 views
14

Я собираюсь разработать программу, которая будет установлена ​​и запущена как служба Windows на внутренних серверах (с доступом в Интернет) нескольких клиентов. У меня нет физического доступа к серверам. То, над чем я работаю, - это схема надежного развертывания обновлений для программы.Автоматическое обновление службы Windows

Я потратил немало времени на поиск лучших практик для автообновлений Windows Service, но нашел очень мало полезной информации. Большинство методов, таких как ClickOnce, похоже, предназначены главным образом для приложений на базе Windows Forms.

Мой текущий план:

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

Некоторые важные проблемы для меня являются:

  • Будучи в состоянии обрабатывать обновления как для основной службы и службы обновления
  • Будучи в состоянии справиться перерывы, например, сбоя питания или сбоя соединения в любая точка в процессе обновления

Что интересно, если это общий способ решить эту проблему и/или если у меня нет ничего важного. Это слишком сложно или, возможно, слишком упрощенно? Как бы вы это сделали (или, что еще лучше, как вы это сделали успешно)?

Спасибо!

ответ

13

Я столкнулся с той же проблемой в прошлом году, и я боролся с множеством тех же вопросов. Несколько биты советы:

  • Так как услуга может быть обновлена, обе службы будет функционировать в качестве выполняемых обновлений других. Сервис A будет обновить услугу B и наоборот. По этой причине я предлагаю просто запустить обе службы в любое время. Если вы действительно беспокоитесь, действительно загрузите на свой сервер с помощью звонков, связанных с обновлением, включить/отключить управление сервисом не стоит накладных расходов.

  • Подобные услуги не могут быть установлены на одной машине . Другими словами, вы, , не можете устанавливать новые и старые версии службы , если они имеют одно и то же имя . Если вы не хотите, чтобы усложнил процесс обновления, я хочу, чтобы вы удалили старую версию , а затем установите новую версию. Например, Service A будет загружать Service B Installer, удалить Service B, установить новую версию Service B, а затем запустить.Сервис B будет делать то же самое для службы А.

  • Поскольку каждая служба управляет другой стороны, они должны не только проверить доступных обновлений, но они должны проверить здоровье друг друга. Для примера Служба A проверит, есть ли , если существует служба B, и если она работает. Если проверка здоровья не удается, списка шагов для решения этой проблемы и получить ход службы будет завершен Service A. Исполнительных флажков и восстановительных работы здоровья будут охватывать вас сейчас важно, что проблема возникает с обновлением , начальная установка или общие операции.

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

Есть буквально грозди потенциальных подводных камней с раствором такого рода: услуги не работают при запуске, UAC мешая, не будучи в состоянии установить и удалить службы с тем же пользователем, обеспечивая пользователь, устанавливающий у службы есть достаточные разрешения, потеря связи, получение .NET Framework на клиентском компьютере, обработка перезагрузки после установки, если необходимо, и т. д.

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

+0

Спасибо за ценный вклад. Как вы справились с потенциальной ситуацией, когда процесс обновления прерван после удаления старой версии, но до того, как новый был установлен? Вы отслеживали, насколько далеко вы были в процессе? –

+0

У меня нет инкрементных установок. Служба либо установлена, либо работает, либо нет. Поэтому я не отслеживаю, насколько далеко продвинулся процесс. Я * просто * использую проверки работоспособности, чтобы определить, если что-то не так, и при необходимости повторите попытку установки. –

+0

@Ben Вы когда-нибудь публиковали свой опыт? –

Смежные вопросы