forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Обновление (http://forum.boolean.name/showthread.php?t=16360)

pax 20.02.2012 09:32

Обновление
 
В общем встала задача с обновлением программы. Задача обновить исполняемый файл уже запущенной программы, т.е. выполнить обновление из нее самой. Есть какие-то рефы на WinAPI, с помощью которых можно разорвать связь с открытым файлом?

Или если у кого есть другие предложения по реализации обновления - буду благодарен!

SBJoker 20.02.2012 10:56

Ответ: Обновление
 
Сама windows обновляет свои запущенные файлы лишь после перезагрузки, думаешь у тебя есть способ получше? Только через посредника.

pax 20.02.2012 11:18

Ответ: Обновление
 
У меня есть мысль обновить программу через бат файл с паузой, т.е. из программы запустить бат и выйти, а в батнике по нажатию кнопки запустить скачанные файлы на распаковку... но как-то оно мне не очень нравится...

moka 20.02.2012 13:12

Ответ: Обновление
 
#2 - посредника, также делаю.
И описал ты в #3, именно его, посредника.

Если это клиентское ПО, то нужен отдельный Updater, который будет делать всю работу, он может также работать как отдельный процесс - подготавливаться к обновлению, но осуществлять его должен вынуждая перезапустить приложение.
Это как в Firefox'е, обновления делать, и других ПО.

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

Но подобные фичи очень не просты в использовании, т.к. требуют весьма мощной архитектуры, и стабильной.

Серверное ПО, также может состоять из отдельных приложений, и использовать внутренние методы коммуникации, например используя отличную библиотеку ZeroMQ, которая для кластерных систем вообще шик.
Таким образом продумать систему коммуникации приложений, и далее дело уже в шляпе, запуск и остановка приложений - и будет их обновлением, при этом при корректной реализации, не мешающим работе сервера.

pax 20.02.2012 13:25

Ответ: Обновление
 
Сделал через bat и 7z.exe
Мог конечно написать оболочку на C#, но сказали никакого Net Framework


Часовой пояс GMT +4, время: 11:39.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot