Показать полную графическую версию : *Теория* | Нужен алгоритм автоматического обновления программы
Никак не могу придумать как заставить программу саму себя обновлять.
Примерно по пунктам представляю так:
1. Запуск программы
2. Скачать с сайта файл http://сайтдляобновления.рф/апдейт.txt
3. Прочитать в файле версию
4. Сравнить со своей версией
5. Если наша версия старее, качаем новую по ссылке http://сайтдляобновления.рф/апдейт.exe
А что дальше делать? Как удалить текущий(выполняемый) файл, а в место него подсунуть новый и запустить?
Может быть "батник" специальный можно написать, но как-то не красиво :)
Подскажите как решить эту проблему по взрослому?
зы: Если это упростит решение, использую С#
Пока файл занят, его невозможно заменить. Его по-любому нужно завершать!А далее с помощью чего нибудь заменить, будь то батник, либо что нибудь другое! В большинстве случаев же, при появлении новой версии, запускается другое приложение(апдейтер) и с помощью него уже обновляется сама программа! Сделайте что нибудь в таком же роде!
Поспрашивал тут у яндекса (надо было до создания темы это сделать)
Пока файл занят, его невозможно заменить. »
заменить нельзя, а вот переименовать можно.
в итоге можно так (продолжение):
6. Переименовываем себя
7. Скачиваем новый файл
8. Запускаем новый
9. Закрываем старый.
Ходят слухи что такое работает, надо проверить.
эм.. а зачем так сложно. В своей программе проверяй версию файла на сервере. Если вышло обновление скачиваешь его и запускаешь другую программу через стандартные средства виндоз, и закрываешь свою программку. Новая программка смотрит в диспетчер задач в поисках первой программы - тем самым проверяя, закрылась она или еще нет, как только закрылась - обновляет файл старой программки каким угодно образом.
Выгодна этого метода - простота, удобство, если вдруг упадет или нетак чтото обновится всегда можно предусмотреть запуск второй программы из командной строки с каким нить хитрым ключем, самостоятельно скачивающим и устанавливающим твою прогу.
Delirium
01-03-2011, 01:11
Visual Studio позволяет создавать инсталлятор, который сам будет проверять обновления с любого места (локальная папка, WEB).
Visual Studio позволяет создавать инсталлятор, который сам будет проверять обновления с любого места (локальная папка, WEB). »
Каким образом он это делает? Добавляет еще свою программу в автозагрузку и постоянно проверяет мой сервер на обновления? Зачем иметь постоянно запущенный процесс, если достаточно проверять обновления при запуске. Так гугл делает. Мне это не очень нравится. Может быть, конечно, он свой "лаунчер" создает, который при запуске проверяет обновления, а потом запускает программу. Тогда появляется проблема если пользователь сам захочет сделать ярлык.
эм.. а зачем так сложно. В своей программе проверяй версию файла на сервере. Если вышло обновление скачиваешь его и запускаешь другую программу через стандартные средства виндоз, и закрываешь свою программку. Новая программка смотрит в диспетчер задач в поисках первой программы - тем самым проверяя, закрылась она или еще нет, как только закрылась - обновляет файл старой программки каким угодно образом.
Выгодна этого метода - простота, удобство, если вдруг упадет или нетак чтото обновится всегда можно предусмотреть запуск второй программы из командной строки с каким нить хитрым ключем, самостоятельно скачивающим и устанавливающим твою прогу. »
Если я правильно понял, ваша программа (programm.exe) скачивает некий файл обновления (updater.exe), запускает его, а он уже выполняет все необходимые действия для обновление программы?
нет, я имел в виду что у тебя есть program.exe и скажем update.exe. Program.exe смотрит на сервер и, если есть, скачивает скажем update.tmp. как только она скачала - открывает update.exe и закрывает себя. Update.exe знает что делать с update.tmp и делает это, после чего снова запускает program.exe (уже новую).
Хотя можно так-же как и ты сказал.
нет, я имел в виду что у тебя есть program.exe и скажем update.exe. Program.exe смотрит на сервер и, если есть, скачивает скажем update.tmp. как только она скачала - открывает update.exe и закрывает себя. Update.exe знает что делать с update.tmp и делает это, после чего снова запускает program.exe (уже новую).
Хотя можно так-же как и ты сказал. »
Я как раз тоже самое и сказал, просто ты не учел то, что update.exe тоже иногда придется обновлять :)
ну почему.. смотря как напишешь. Если реализуешь полный функциональный набор, то обновлять ненадо, а если будешь годами доделывать.. то да.. придется
Если так рассуждать, то лучше сразу в программе реализовать полный функционал, тогда вообще обновлять не придется.
Любезный
02-03-2011, 08:03
Если так рассуждать, то лучше сразу в программе реализовать полный функционал, тогда вообще обновлять не придется.
Ну не скажи. Ошибки бывают почти у всех, а обновление - один из способов их исправления. Кроме того, заказчики могут придумать новый функционал.
Ну не скажи. Ошибки бывают почти у всех, а обновление - один из способов их исправления. Кроме того, заказчики могут придумать новый функционал. »
Видимо понятие сарказм тебе не знакомо.
у программы update.exe очень узкая задача и предусмотреть в ней ВСЕ очень несложно, особенно если не жалеть особо трафик и применить фантацию. В конце концов можно тупо сделать update как некий компилятор, который будет транслировать то, что написано в файле процесс_обновления.тхт и команды копировать, удалять, менять и т.п. А если скачать установщик то вообще нафига чтото придумывать - пусть юзер через браузер по ссылке его качает когда хочет и ставит когда хочет, просто отслеживать его появление и информировать и все.
Beyound я не понимаю вашей логики. Извините.
да фигня война - главное маневры. Пиши то, что тебе ближе и понятнее - тогда и прога нормальная будет, а копашиться не в своих идеях толка мало так что клаву в руки и вперед а там авось чтото да получится )))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.