Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   *Теория* | Нужен алгоритм автоматического обновления программы (http://forum.oszone.net/showthread.php?t=200707)

amohax 28-02-2011 13:27 1623629

*Теория* | Нужен алгоритм автоматического обновления программы
 
Никак не могу придумать как заставить программу саму себя обновлять.

Примерно по пунктам представляю так:

1. Запуск программы
2. Скачать с сайта файл http://сайтдляобновления.рф/апдейт.txt
3. Прочитать в файле версию
4. Сравнить со своей версией
5. Если наша версия старее, качаем новую по ссылке http://сайтдляобновления.рф/апдейт.exe

А что дальше делать? Как удалить текущий(выполняемый) файл, а в место него подсунуть новый и запустить?

Может быть "батник" специальный можно написать, но как-то не красиво :)

Подскажите как решить эту проблему по взрослому?

зы: Если это упростит решение, использую С#

LilLoco 28-02-2011 13:51 1623650

Пока файл занят, его невозможно заменить. Его по-любому нужно завершать!А далее с помощью чего нибудь заменить, будь то батник, либо что нибудь другое! В большинстве случаев же, при появлении новой версии, запускается другое приложение(апдейтер) и с помощью него уже обновляется сама программа! Сделайте что нибудь в таком же роде!

amohax 28-02-2011 14:19 1623671

Поспрашивал тут у яндекса (надо было до создания темы это сделать)

Цитата:

Цитата LilLoco
Пока файл занят, его невозможно заменить. »

заменить нельзя, а вот переименовать можно.

в итоге можно так (продолжение):

6. Переименовываем себя
7. Скачиваем новый файл
8. Запускаем новый
9. Закрываем старый.

Ходят слухи что такое работает, надо проверить.

Beyound 28-02-2011 17:41 1623837

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

Delirium 01-03-2011 01:11 1624133

Visual Studio позволяет создавать инсталлятор, который сам будет проверять обновления с любого места (локальная папка, WEB).

amohax 01-03-2011 06:14 1624176

Цитата:

Цитата Delirium
Visual Studio позволяет создавать инсталлятор, который сам будет проверять обновления с любого места (локальная папка, WEB). »

Каким образом он это делает? Добавляет еще свою программу в автозагрузку и постоянно проверяет мой сервер на обновления? Зачем иметь постоянно запущенный процесс, если достаточно проверять обновления при запуске. Так гугл делает. Мне это не очень нравится. Может быть, конечно, он свой "лаунчер" создает, который при запуске проверяет обновления, а потом запускает программу. Тогда появляется проблема если пользователь сам захочет сделать ярлык.

Цитата:

Цитата Beyound
эм.. а зачем так сложно. В своей программе проверяй версию файла на сервере. Если вышло обновление скачиваешь его и запускаешь другую программу через стандартные средства виндоз, и закрываешь свою программку. Новая программка смотрит в диспетчер задач в поисках первой программы - тем самым проверяя, закрылась она или еще нет, как только закрылась - обновляет файл старой программки каким угодно образом.
Выгодна этого метода - простота, удобство, если вдруг упадет или нетак чтото обновится всегда можно предусмотреть запуск второй программы из командной строки с каким нить хитрым ключем, самостоятельно скачивающим и устанавливающим твою прогу. »

Если я правильно понял, ваша программа (programm.exe) скачивает некий файл обновления (updater.exe), запускает его, а он уже выполняет все необходимые действия для обновление программы?

Beyound 01-03-2011 18:05 1624661

нет, я имел в виду что у тебя есть program.exe и скажем update.exe. Program.exe смотрит на сервер и, если есть, скачивает скажем update.tmp. как только она скачала - открывает update.exe и закрывает себя. Update.exe знает что делать с update.tmp и делает это, после чего снова запускает program.exe (уже новую).
Хотя можно так-же как и ты сказал.

amohax 01-03-2011 18:45 1624705

Цитата:

Цитата Beyound
нет, я имел в виду что у тебя есть program.exe и скажем update.exe. Program.exe смотрит на сервер и, если есть, скачивает скажем update.tmp. как только она скачала - открывает update.exe и закрывает себя. Update.exe знает что делать с update.tmp и делает это, после чего снова запускает program.exe (уже новую).
Хотя можно так-же как и ты сказал. »

Я как раз тоже самое и сказал, просто ты не учел то, что update.exe тоже иногда придется обновлять :)

Beyound 01-03-2011 20:46 1624801

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

amohax 02-03-2011 07:03 1625038

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

Любезный 02-03-2011 08:03 1625063

Цитата:

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

amohax 02-03-2011 09:23 1625109

Цитата:

Цитата Любезный
Ну не скажи. Ошибки бывают почти у всех, а обновление - один из способов их исправления. Кроме того, заказчики могут придумать новый функционал. »

Видимо понятие сарказм тебе не знакомо.

Beyound 02-03-2011 14:38 1625366

у программы update.exe очень узкая задача и предусмотреть в ней ВСЕ очень несложно, особенно если не жалеть особо трафик и применить фантацию. В конце концов можно тупо сделать update как некий компилятор, который будет транслировать то, что написано в файле процесс_обновления.тхт и команды копировать, удалять, менять и т.п. А если скачать установщик то вообще нафига чтото придумывать - пусть юзер через браузер по ссылке его качает когда хочет и ставит когда хочет, просто отслеживать его появление и информировать и все.

amohax 02-03-2011 17:39 1625559

Beyound я не понимаю вашей логики. Извините.

Beyound 02-03-2011 17:55 1625572

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


Время: 15:32.

Время: 15:32.
© OSzone.net 2001-