IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Перезапись exe во время выполнения
Unconnected
сообщение 7.05.2011 13:24
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

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

Сообщение отредактировано: Unconnected - 7.05.2011 13:25


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 8.05.2011 17:38
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
скачали новый, старый запускает его с параметром-своим хэндлом
Кого это "его"? Я тебе что выше писал? Как только обновление доступно - запускается Updater, который и производит скачку. Скачал - послал сообщение твоей основной программе. Она его приняла, аккуратно, без спешки закрыла все потоки (не Halt-ами, а /Terminate + FreeOnTerminate/ или /Terminate + WaitFor/, заодно отслеживая, что нет спящих потоков), и потом, перед самым своим завершением, послала Updater-у сообщение: "Все, все потоки удалены, все файлы закрыты, я никого не держу и делаю харакири". Твой Updater, приняв это сообщение, понимает, что основная программа уже вот-вот отбросит коньки, и, выждав контрольный промежуток времени (уже все закрыто, тормозов при выходе не будет, ага, тут можно и подождать), удаляет старый EXE-шник, заменяет его новым, и запускает его на выполнение. После чего завершается сам (его EXE-файл при этом удаляется автоматически, спасибо Дж. Рихтеру). Итог: обновленная программа работает, имя EXE-шника не изменилось, установщик исчез. Все как и было.

В твоем случае опять будет проблема. Скачал ты файл, запустил НОВОЕ приложение, старое закрылось. И что? Новое работает под новым именем. Чего ты добился? Нет уж, "разделяй и властвуй". Каждый делает то, что ему положено делать. Обновлялка качает обновления и занимается, собственно, его установкой, приложение ей в этом не мешает. А только помогает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Unconnected   Перезапись exe во время выполнения   7.05.2011 13:24
IUnknown   Размечтался... :) Что именно "не очень стабил...   7.05.2011 15:23
Unconnected   С DLL заморачиваться не хочу, не тот левел) Ну, я ...   7.05.2011 17:43
IUnknown   Ты б делал правильно, проблем бы было меньше :) В...   7.05.2011 18:33
IUnknown   А нет. Только что попробовал еще один способ - раб...   7.05.2011 21:02
Unconnected   А я то думал, что память, выделенная под потоки, а...   7.05.2011 23:44
-TarasBer-   > В обнове была пауза в несколько секунд, чтобы...   8.05.2011 11:14
Unconnected   Хочешь сказать, что в моем случае после halt-а про...   8.05.2011 14:02
IUnknown   Ты сам это сказал. Вот тут: Закрывалась бы програм...   8.05.2011 15:14
Unconnected   Короче алгоритм я понял такой.. скачали новый, ста...   8.05.2011 16:58
IUnknown   Кого это "его"? Я тебе что выше писал? К...   8.05.2011 17:38
Unconnected   В смысле "Новое работает под новым именем...   8.05.2011 17:51
IUnknown   Ты из работающей программы его запускаешь, и оно т...   8.05.2011 18:47
Unconnected   Ну да, говорю же, запущенное обновление монитори...   8.05.2011 18:52
IUnknown   Это "почему бы и нет" у тебя уже было. Н...   8.05.2011 19:39
Unconnected   Ок, совет понял) Закрывание loaderthread:=Tre...   9.05.2011 2:01
IUnknown   У тебя, я надеюсь, не совершенно секретная разрабо...   12.05.2011 9:26
Unconnected   Спасибо, но в принципе уже разобрался, сделал так ...   12.05.2011 12:32


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.07.2025 16:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"