Форум: "Основная";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
ВнизОбновление программы динамически через интернет Найти похожие ветки
← →
Ануфрий © (2007-08-10 08:58) [0]Хочу сделать автоматическое обновление программы через интернет, без участия пользователя.
Программа проверяет наличие новой версии и скачивает свежий exe-шник из интернета.
Как теперь им подменить старый? Понятно, что пока запущена программа, этого не сделать. Но как сделать это во время его запуска, по типу того, как это делает FireFox?
← →
Сергей М. © (2007-08-10 09:06) [1]Например. перед завершением старой версии делегировать (тем или иным подходящим способом) другому процессу полномочия на замену исп.файла и последующего его старта.
← →
Slym © (2007-08-10 09:07) [2]ДВА экзешника:
1. сама программа...
2. launch.exe - ее функция запустить "саму программу", и по возможности превдарительно обновить файл программы...
чтобы юзеры не пользовались программой в обход лончера меняем расширение у программы (наприм .bin)
или как консультант+: лончер выбирает файл vr{xxxxx}.res, где {xxxxx} - максимальный среди найденых, и его запускает
← →
Ануфрий © (2007-08-10 09:11) [3][1] А какому другому процессу? Его надо создать из программы? Но он тогда наверное ей будет принадлежать... А можно пример?
[2] Я думал над таким вариантом... Но как-то это не красиво.
← →
$OOFFOO (2007-08-10 09:18) [4]
> А какому другому процессу
другому
← →
Сергей М. © (2007-08-10 09:20) [5]
> какому другому процессу?
Ну, например, тому самому launch.exe, о котором идет речь в [2].
> Его надо создать из программы?
Не обязательно, но это самый надежный способ.
> он тогда наверное ей будет принадлежать
Что значит "принадлежать" ?
Процессы не могут находиться во взаимоотношениях "принадлежности" - каждый процесс в ОС самодостаточен.
> можно пример?
Пример чего ?
← →
Ануфрий © (2007-08-10 09:24) [6][5]
> Пример чего ?
вот этого:
> перед завершением старой версии делегировать (тем или иным
> подходящим способом) другому процессу полномочия на замену
> исп.файла
← →
Сергей М. © (2007-08-10 09:27) [7]
> Ануфрий © (10.08.07 09:24) [6]
Все зависит от выбора конкретного "подходящего способа".
Ты его выбрал ?
Вариант [2] тебя почему не устраивает ?
Он самый простой, наглядный и надежный ..
← →
$OOFFOO (2007-08-10 09:29) [8]
> Пример чего ?
пример того...
← →
Сергей М. © (2007-08-10 09:30) [9]
> $OOFFOO (10.08.07 09:29) [8]
Иногда лучше жевать..
← →
Ануфрий © (2007-08-10 09:32) [10]Вариант [2] мне не нравится наличием дополнительных программ для запуска. У меня программа из одного файла, не хотелось бы, чтобы кроме него еще что-то мешалось.
А кроме [2] других вариантов я не знаю. Какие еще способы есть?
← →
Сергей М. © (2007-08-10 09:35) [11]
> Какие еще способы есть?
Например, внедрить и запустить код замены и рестарта исп.файла в чужой ("суррогатный") процесс.
Этот способ ощутимо сложнее (вряд ли ты его потяшешь) и ощутимо менее надежен.
← →
$OOFFOO (2007-08-10 09:37) [12]
> Иногда лучше жевать..
а иногда - сосать..
← →
Ануфрий © (2007-08-10 10:05) [13][11]
Этот вариант мне нравится больше. Мне бы имена функция, дальше, думаю, разберусь.
← →
Сергей М. © (2007-08-10 10:37) [14]
> Ануфрий © (10.08.07 10:05) [13]
> Этот вариант мне нравится больше
А ненадежность тебя, надо понимать, не волнует ?
← →
Ануфрий © (2007-08-10 10:43) [15][14] Волнует, но вариант с дополнительным файлом меньше нравится... Хотя я тут подумал, что в варианте [11] еще возможно, что Антивирусы будут ругаться о внедрении в чужие процессы и, возможно, блокировать программу.
Я еще все равно буду тестировать и думать над обоими вариантами. Просто в случае [2] я не вижу проблем с реализацией. А вот [11] я не знаю как делать. Потому и спрашиваю.
← →
Сергей М. © (2007-08-10 10:52) [16]
> подумал, что в варианте [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:55) [17][16] Спасибо.
← →
Сергей М. © (2007-08-10 11:08) [18]
> Ануфрий © (10.08.07 10:55) [17]
Есть еще один, на мой взгляд, оптимальный для таких задач способ - использование файла сценария, выполняемого с пом. штатной утилиты cscript.exe
← →
Сергей М. © (2007-08-10 11:23) [19]
> Ануфрий © (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
← →
MetalFan © (2007-08-10 23:05) [20]алгоритм можно построить примерно так:
1) зашить в ресурсы осн.приложения "обновлялку"
2) приложение само проверяет, есть ли обновления. само их скачивает и предлагает пользователю перезапуститься для применения обновления.
3) сохранить в файл на диске "обновлялку", запустить, завершиться.
4) "обновлялка" заменяет необходимые файлы и запускает осн.приложение с опр.ключем, приложение стирает файл "обновлялки" и привет)))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c