PDA

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


amohax
28-02-2011, 13:27
Никак не могу придумать как заставить программу саму себя обновлять.

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

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

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

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

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

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

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

amohax
28-02-2011, 14:19
Поспрашивал тут у яндекса (надо было до создания темы это сделать)

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

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

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

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

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

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

amohax
01-03-2011, 06:14
Visual Studio позволяет создавать инсталлятор, который сам будет проверять обновления с любого места (локальная папка, WEB). »
Каким образом он это делает? Добавляет еще свою программу в автозагрузку и постоянно проверяет мой сервер на обновления? Зачем иметь постоянно запущенный процесс, если достаточно проверять обновления при запуске. Так гугл делает. Мне это не очень нравится. Может быть, конечно, он свой "лаунчер" создает, который при запуске проверяет обновления, а потом запускает программу. Тогда появляется проблема если пользователь сам захочет сделать ярлык.

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

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

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

Beyound
01-03-2011, 20:46
ну почему.. смотря как напишешь. Если реализуешь полный функциональный набор, то обновлять ненадо, а если будешь годами доделывать.. то да.. придется

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

Любезный
02-03-2011, 08:03
Если так рассуждать, то лучше сразу в программе реализовать полный функционал, тогда вообще обновлять не придется.

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

amohax
02-03-2011, 09:23
Ну не скажи. Ошибки бывают почти у всех, а обновление - один из способов их исправления. Кроме того, заказчики могут придумать новый функционал. »
Видимо понятие сарказм тебе не знакомо.

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

amohax
02-03-2011, 17:39
Beyound я не понимаю вашей логики. Извините.

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




© OSzone.net 2001-2012