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

iRumba

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

pro100-it

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

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

iRumba

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

pro100-it

Постоялец
Регистрация
29 Июл 2015
Сообщения
84
Реакции
31
Для утилитки типа ccleaner - сгодится и замена, а вот для серверных приложений и системных служб нет. А про что именно говорит ТС - неясно.

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

iRumba

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

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

pro100-it

Постоялец
Регистрация
29 Июл 2015
Сообщения
84
Реакции
31
Когда речь заходит о критических обновлениях ядра, тут да, придется останавливать и накатывать. Но остановка сервера может дорого обходиться, поэтому варианты обновления "на лету" были и останутся. Зачем останавливать сервер, когда нужно всего то подменить библиотеку для какой либо аналитики, которая всего то будет работать быстрее предыдущей версии?

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

iRumba

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

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

Soru

Постоялец
Регистрация
28 Окт 2014
Сообщения
44
Реакции
18
либо Windows Installer, либо ClickOnce. все зависит от того как и откуда будет обновляться софт. первый способ - для распространения софта, второй - внутренний. ну это, разумеется, предпочтительно.
 

joker13

Создатель
Регистрация
13 Ноя 2012
Сообщения
15
Реакции
11
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

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

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