Автоматическое обновление программы C#

Смотрим в сторону MEF или иного механизма плагинов. Проверка обновленных файлов задача не сложная, но само обновление должно уметь подменить библиотеки и исполняемый файл. Так как в проекте .NET все файлы завязаны друг на друге, их приходится обновлять все вместе (обновилась одна библиотека, обновляются все остальные, которые от нее зависят, в том числе и экзешник), нужно подключать библиотеки через имя файла без strong assembly. MEF это позволяет
 
Смотрим в сторону MEF или иного механизма плагинов. Проверка обновленных файлов задача не сложная, но само обновление должно уметь подменить библиотеки и исполняемый файл. Так как в проекте .NET все файлы завязаны друг на друге, их приходится обновлять все вместе (обновилась одна библиотека, обновляются все остальные, которые от нее зависят, в том числе и экзешник), нужно подключать библиотеки через имя файла без strong assembly. MEF это позволяет

Вот потому и говорю, какой смысл напрягать попу на обновлении методом замены, когда все известные программы, обновляются локально, сначала качают дистрибутив потом его запускают и нет никаких проблем... Взять скайп, ccleaner и пр. Зачем оно нужно когда сейчас канал позволяет скачать целиком и не заморачиваться.... На диал-апе да, там старались минимизировать дабы не заставлять юзера ждать.
 
Вот потому и говорю, какой смысл напрягать попу на обновлении методом замены, когда все известные программы, обновляются локально, сначала качают дистрибутив потом его запускают и нет никаких проблем... Взять скайп, ccleaner и пр. Зачем оно нужно когда сейчас канал позволяет скачать целиком и не заморачиваться.... На диал-апе да, там старались минимизировать дабы не заставлять юзера ждать.
Для утилитки типа ccleaner - сгодится и замена, а вот для серверных приложений и системных служб нет. А про что именно говорит ТС - неясно.
 
Для утилитки типа ccleaner - сгодится и замена, а вот для серверных приложений и системных служб нет. А про что именно говорит ТС - неясно.

Да не важно что это, а серверные приложения обновляются так же пакетно (причем в большей степени еще и вручную), при использовании MSSQL Oracle и пр. Служб тем более, надо отследить все критические моменты, выгрузка программы и пр. За свои 35 а начал заниматься компами еще когда Atari Spectrum были, и компы только только стали появляться 286, 386, 486... Много видел программ. Экономические типа клиент - сервер, обновляются методом пакетным и ручками. Прямотока нет уже давно... да и особо не было, в любом случае скачивается целиком пакет и потом запускается. кто-то обходится инсталляторами в которых все крит. моменты предусмотрены в скриптах. кто-то изобретает велосипед делая свой инсталл, а кому-то и WinRar'а достаточно
 
Да не важно что это, а серверные приложения обновляются так же пакетно (причем в большей степени еще и вручную), при использовании MSSQL Oracle и пр. Служб тем более, надо отследить все критические моменты, выгрузка программы и пр. За свои 35 а начал заниматься компами еще когда Atari Spectrum были, и компы только только стали появляться 286, 386, 486... Много видел программ. Экономические типа клиент - сервер, обновляются методом пакетным и ручками. Прямотока нет уже давно... да и особо не было, в любом случае скачивается целиком пакет и потом запускается. кто-то обходится инсталляторами в которых все крит. моменты предусмотрены в скриптах. кто-то изобретает велосипед делая свой инсталл, а кому-то и WinRar'а достаточно
Когда речь заходит о критических обновлениях ядра, тут да, придется останавливать и накатывать. Но остановка сервера может дорого обходиться, поэтому варианты обновления "на лету" были и останутся. Зачем останавливать сервер, когда нужно всего то подменить библиотеку для какой либо аналитики, которая всего то будет работать быстрее предыдущей версии?

ЗЫ
Я за свои 28 лет видел много бреда и бесполезной работы. Цель программиста - упростить работу себе, пользователю, саппортам и комьюнити. В идеале - свести работу до нажатия одной кнопки "работай!". ;)
 
Когда речь заходит о критических обновлениях ядра, тут да, придется останавливать и накатывать. Но остановка сервера может дорого обходиться, поэтому варианты обновления "на лету" были и останутся. Зачем останавливать сервер, когда нужно всего то подменить библиотеку для какой либо аналитики, которая всего то будет работать быстрее предыдущей версии?

Об этом можно долго говорить, вариантов много, думаю смысла нет обсуждать. Взять за пример УРМ от фирмы Криста, отчеты они скидывают (для аналитики) в виде вложения в письмо в УРМ, сохраняем и заменяем ручками. dll во время работы программы практически невозможно подменять, ибо библиотеки привязаны к ПО и замена работающего модуля без выгрузки его не возможно. Новые библиотеки вполне вероятно и можно подкинуть но работать они в любом случае будут после перезапуска ПО, если конечно не имеется ввиду подключение в виде плагина, но например в экономических программах ни разу не видел плагинов, шкур и пр. )))
 
Об этом можно долго говорить, вариантов много, думаю смысла нет обсуждать. Взять за пример УРМ от фирмы Криста, отчеты они скидывают (для аналитики) в виде вложения в письмо в УРМ, сохраняем и заменяем ручками. dll во время работы программы практически невозможно подменять, ибо библиотеки привязаны к ПО и замена работающего модуля без выгрузки его не возможно. Новые библиотеки вполне вероятно и можно подкинуть но работать они в любом случае будут после перезапуска ПО, если конечно не имеется ввиду подключение в виде плагина, но например в экономических программах ни разу не видел плагинов, шкур и пр. )))
Конечно вариантов много и все они имеют право на жизнь. Я об этом и говорю со второго поста :)

А по поводу подмены библиотек, мы же про .NET говорим. Он это поддерживает "из коробки". Выгрузку и подгрузку библиотек. Взаимодействие осуществляется через интерфейсы и контракты. Загруженная библиотека находится в памяти, поэтому сам файл можно разблокировать (не повреждая рантайм программы) и удалить, после чего залить новый файл, далее в программе сделать выгрузку текущей и подгрузку новой библиотеки. Момент, когда интерфейс не имеет реализации (между выгрузкой и подгрузкой) можно проверить и сделать небольшую паузу, пока библиотека вновь не будет загружена, чтобы приложение не падало. Думаю, задержка в пару сотен милисекунд не сравнится с остановкой, полным обновлением и запуском приложения.
 
либо Windows Installer, либо ClickOnce. все зависит от того как и откуда будет обновляться софт. первый способ - для распространения софта, второй - внутренний. ну это, разумеется, предпочтительно.
 
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

На хабре была хорошая статья Для просмотра ссылки Войди или Зарегистрируйся вполне приемлемый вариант решения

Вот пост про доработку того кода Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху