Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление программы динамически через интернет [D7, WinXP]


Ануфрий ©   (2007-08-10 08:58:00) 

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

Программа проверяет наличие новой версии и скачивает свежий exe-шник из интернета.

Как теперь им подменить старый? Понятно, что пока запущена программа, этого не сделать. Но как сделать это во время его запуска, по типу того, как это делает FireFox?


MetalFan   (2007-08-10 23:05:00) [1]

алгоритм можно построить примерно так:
1) зашить в ресурсы осн.приложения "обновлялку"
2) приложение само проверяет, есть ли обновления. само их скачивает и предлагает пользователю перезапуститься для применения обновления.
3) сохранить в файл на диске "обновлялку", запустить, завершиться.
4) "обновлялка" заменяет необходимые файлы и запускает осн.приложение с опр.ключем, приложение стирает файл "обновлялки" и привет)))


Сергей М.   (2007-08-10 11:23:00) [2]


> Ануфрий ©   (10.08.07 10:55) [17]


http://www.google.ru/search?q=%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F+cscript.exe&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a

http://www.optim.su/cs/2000/1/wsh/wsh.asp
http://www.script-coding.info/WSH/WScript.html


Сергей М.   (2007-08-10 11:08:00) [3]


> Ануфрий ©   (10.08.07 10:55) [17]


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


Ануфрий   (2007-08-10 10:55:00) [4]

[16] Спасибо.


Сергей М.   (2007-08-10 10:52:00) [5]


> подумал, что в варианте [11] еще возможно, что Антивирусы
> будут ругаться о внедрении в чужие процессы и, возможно,
>  блокировать программу


Именно так.
Это и есть один из основных составляющих ненадежности.


> [11] я не знаю как делать


О внедрении своего кода в суррогатный процесс существует множество статей с примерами.

http://www.google.ru/search?q=Delphi+%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BE%D0%B4%D0%B0+%D0%B2+%D1%87%D1%83%D0%B6%D0%BE%D0%B9+%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a


Ануфрий   (2007-08-10 10:43:00) [6]

[14] Волнует, но вариант с дополнительным файлом меньше нравится... Хотя я тут подумал, что в варианте [11] еще возможно, что Антивирусы будут ругаться о внедрении в чужие процессы и, возможно, блокировать программу.

Я еще все равно буду тестировать и думать над обоими вариантами. Просто в случае [2] я не вижу проблем с реализацией. А вот [11] я не знаю как делать. Потому и спрашиваю.


Сергей М.   (2007-08-10 10:37:00) [7]


> Ануфрий ©   (10.08.07 10:05) [13]



> Этот вариант мне нравится больше


А ненадежность тебя, надо понимать, не волнует ?


Ануфрий   (2007-08-10 10:05:00) [8]

[11]
Этот вариант мне нравится больше. Мне бы имена функция, дальше, думаю, разберусь.


$OOFFOO   (2007-08-10 09:37:00) [9]


> Иногда лучше жевать..

а иногда - сосать..


Сергей М.   (2007-08-10 09:35:00) [10]


> Какие еще способы есть?


Например, внедрить и запустить код замены и рестарта исп.файла в чужой ("суррогатный") процесс.

Этот способ ощутимо сложнее (вряд ли ты его потяшешь) и ощутимо менее надежен.


Ануфрий   (2007-08-10 09:32:00) [11]

Вариант [2] мне не нравится наличием дополнительных программ для запуска. У меня программа из одного файла, не хотелось бы, чтобы кроме него еще что-то мешалось.

А кроме [2] других вариантов я не знаю. Какие еще способы есть?


Сергей М.   (2007-08-10 09:30:00) [12]


> $OOFFOO   (10.08.07 09:29) [8]


Иногда лучше жевать..


$OOFFOO   (2007-08-10 09:29:00) [13]


> Пример чего ?

пример того...


Сергей М.   (2007-08-10 09:27:00) [14]


> Ануфрий ©   (10.08.07 09:24) [6]


Все зависит от выбора конкретного "подходящего способа".

Ты его выбрал ?

Вариант [2] тебя почему не устраивает ?

Он самый простой, наглядный и надежный ..


Ануфрий   (2007-08-10 09:24:00) [15]

[5]

> Пример чего ?

вот этого:

> перед завершением старой версии делегировать (тем или иным
> подходящим способом) другому процессу полномочия на замену
> исп.файла


Сергей М.   (2007-08-10 09:20:00) [16]


> какому другому процессу?


Ну, например, тому самому launch.exe, о котором идет речь в [2].


> Его надо создать из программы?


Не обязательно, но это самый надежный способ.


> он тогда наверное ей будет принадлежать


Что значит "принадлежать" ?
Процессы не могут находиться во взаимоотношениях "принадлежности" - каждый процесс в ОС самодостаточен.


> можно пример?


Пример чего ?


$OOFFOO   (2007-08-10 09:18:00) [17]


>  А какому другому процессу

другому


Ануфрий   (2007-08-10 09:11:00) [18]

[1] А какому другому процессу? Его надо создать из программы? Но он тогда наверное ей будет принадлежать... А можно пример?
[2] Я думал над таким вариантом... Но как-то это не красиво.


Slym   (2007-08-10 09:07:00) [19]

ДВА экзешника:
1. сама программа...
2. launch.exe - ее функция запустить "саму программу", и по возможности превдарительно обновить файл программы...
чтобы юзеры не пользовались программой в обход лончера меняем расширение у программы (наприм .bin)
или как консультант+: лончер выбирает файл vr{xxxxx}.res, где {xxxxx} - максимальный среди найденых, и его запускает


Сергей М.   (2007-08-10 09:06:00) [20]

Например. перед завершением старой версии делегировать (тем или иным подходящим способом) другому процессу полномочия на замену исп.файла и последующего его старта.


Наверх

Титульная страница Поиск, карта сайта Написать письмо