Подтвердить что ты не робот

Я хочу, чтобы моя служба Windows С# автоматически обновляла себя

Есть ли среда, которая может быть использована для включения службы Windows С# для автоматической проверки более новой версии и ее обновления? Я могу, конечно, написать код для этого, но я ищу рамки, которые уже были реализованы и (что наиболее важно) протестированы.

[править] Вот ссылка на аналогичный вопрос со ссылками на современные проекты, которые помогают выполнить это: Автообновление библиотеки для .NET?

4b9b3361

Ответ 1

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

Может быть проще либо a) запустить пакетную задачу, либо b) обнаружить обновления в процессе работы, затем запустить отдельный процесс, который останавливает службу, обновляет сборки и т.д., А затем перезапускает ее.

Если вы интересуетесь первым, специалисты по шаблонам и практикам MSDN написали блок обновления приложений, который вы адаптируете к своему сервису.

https://web.archive.org/web/20080506103749/http://msdn.microsoft.com/en-us/library/ms978574.aspx

Ответ 2

Мне не известны никакие Framework, которые облегчают решение этой конкретной проблемы.

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

Ответ 3

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

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

Я не знаю никакой известной структуры, которая делает это. Я сделал это сам, но это не общедоступные рамки.

Ответ 4

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

http://wyday.com/wybuild/help/automatic-updates/windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows-service.php

Обратите внимание, что это платная фреймворк (лицензия на разработчика, бесплатная пробная версия включена)

Ответ 5

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

http://www.eggheadcafe.com/articles/20041204.asp

Ответ 6

Не могли бы вы немного уточнить свой вопрос? Я немного смущен, потому что, насколько я знаю, вы всегда можете перезаписать библиотеки DLL, используемые службой. Копирование и перезапуск службы можно легко сделать частью процесса сборки.