Как обновить службу Windows .NET из центрального расположения - PullRequest
4 голосов
/ 04 февраля 2011

Мы создали .NET Windows Service , которую устанавливаем на клиентские ПК для мониторинга и загрузки данных (через веб-службу) с этих ПК.Я ищу способ обновить службу Windows на всех клиентских ПК централизованно - без необходимости удаленного доступа в каждый магазин.

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

  • Служба Windows: .NET версия 2 (из-за ограничений клиентского ПК) - VB.NET
  • Веб-служба: .NET версия 4 - VB.NET
  • Клиентские ПК ОС: от Win2000 до Win7, POSReady, WEPOS

Некоторая дополнительная информация

  • Мыу меня есть установочный файл, который работает очень хорошо, но нам нужно удаленно войти в каждый магазин, чтобы запустить его.И есть сотни магазинов!
  • Мы рассматривали размещение файла установки на FTP-сайте, но нам сказали, что операционные системы Windows Embedded не поддерживают FTP, поэтому мы можем отправить файл через веб-службу
  • Раз в минуту каждая служба Windows вызывает метод веб-службы, который возвращает некоторый XML, который можно использовать для отправки инструкции по обновлению веб-службы.

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

ОБНОВЛЕНИЕ

  • Я могу изменить как службу Windows, так ивеб-служба для добавления этой новой функции обновления
  • Похоже, у меня есть способ получить установочный файл (загрузка из метода веб-службы), но как насчет его запуска?Как запустить установщик и убедиться, что служба Windows выключена?Это делает установщик или служба Windows?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

Если у вас есть веб-сервис, вы можете добавить метод для обновления.

Создайте небольшой установщик обновлений или приложение (которое вы будете запускать локально).
Затем в веб-сервис добавьте метод, который возвращает массив Stream или byte [].
В методе веб-службы считайте двоичный файл установщика в массив или поток byte [] и отправьте его клиенту.

Затем клиент сохранит этот поток в файл, и теперь у вас есть установщик на клиентском компьютере.
Осталось только запустить этот процесс и обновить сервис.

1 голос
/ 04 февраля 2011

Если исправление представляет собой пакет MSI, вы можете использовать Active Directory для отправки обновления на компьютеры в той же сети под управлением сервера AD.Затем обновление будет запущено немедленно или при следующем запуске.

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

Если не использовать AD, это, вероятно, ваш лучший способ: используйте обычные сетевые папки общего доступа, чтобы передать обновление клиенту.Клиентский компьютер ДОЛЖЕН быть запущен, но это может быть на экране приветствия.Затем поместите пакетный файл в папку «Документы и пользователи» / «Все пользователи» / «Пуск» / «Автозагрузка», в которой будет выполняться «стандартная установка» MSI (в основном это говорит MSI выполнить автоматическую установку с параметрами установки по умолчанию).При следующем входе в систему пользователь запускает пакетный файл, выполняя установку.MSI, вероятно, должен очистить командный файл позже.Если вы можете получить удаленный доступ к реестру клиентского компьютера (я ОЧЕНЬ сомневаюсь в этом), вы можете поместить пакетный файл во временный каталог и поместить ссылку на него в папку реестра RunOnce.

Один раз пройдя через этот ригамаролвероятно, научит вас структурировать подобные приложения, чтобы проверять и загружать их собственные обновления через известную веб-службу или настраивать их для использования развертывания ClickOnce (это делает каталоги установки запутанными, но развертывание обновлений НАМНОГО проще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...