Антон Огородник
3 сообщения
#16 лет назад
Качаешь абдейт как второй exe запускаешь его с нужным параметром и этот абтейт удаляет прошлую версию проги и переименовывает себя... чем не вариант ? =\
Николай М.
1895 сообщений
#16 лет назад
Цитата ("Monarhia"):
Качаешь абдейт как второй exe запускаешь его с нужным параметром и этот абтейт удаляет прошлую версию проги и переименовывает себя... чем не вариант ? =\

Ужас... ИМХО)
Владимир А.
246 сообщений
#16 лет назад
Цитата ("tvv"):
Цитата ("sslab"):
После команды обновления, приложение переименовывает себя в имя.bak, качает архив с сервера, потом деархивирует его, удаляет архив, запускает екзеху,закрывает себя...
вот такая схема...есть еще мелкие нюансы, но в целом так...сбоев не наблюдается давно уже..

А что будет, если программа переименует себе в имя.bak, и тут вдруг что-то случится и компьютер выключится? Или по какой-то причине обновление не скачается, или скачается с ошибкой, или не встанет?

IMHO, переименование себя - принципиально неверный путь.

вначале качаем апдейт, а только потом переименовываемся как нам надо. Выход из ситуации предложенной
Evgenij L.
50 сообщений
#16 лет назад
А почему нельзя сгенерить бат-файл с именем gettempfilename? примерное содержимое батника:
timeout 1
ren "oldfilepathname" "newfilename"
erase "%0"
батник этот запускается при выходе из проги(естественно, с параметром "ниразунешоу".
это если вас очень уж ломает перезагружаться после апдейта (inuse /? и всё такое...)
Геннадий П.
1 сообщение
#16 лет назад
Java Script
Тут М.
626 сообщений
#16 лет назад
Цитата ("Buffalon"):
Java Script

Оффтопик
- Приборы?
- 78
- Что "78"?
- А что "приборы"?
Сергей С.
19 сообщений
#16 лет назад
Цитата:
А что будет, если программа переименует себе в имя.bak, и тут вдруг что-то случится и компьютер выключится? Или по какой-то причине обновление не скачается, или скачается с ошибкой, или не встанет?

IMHO, переименование себя - принципиально неверный путь.


Если возникает ошибка при закачке и подобными вещами, то приложение переименовывает себя обратно в *.exe. Ну уж если же выключился комп, то тут либо докачку включай потом, либо если не хочешь докачивать новую версию, то сам вручную переименуй файл из *.bak в *.exe.
Сергей С.
19 сообщений
#16 лет назад
А верный путь или нет, то отвечу так: нет ни одного идеального пути, нет ни одной идеальной программы - у всех есть свои недостатки. Я ни в коем случае не претендую на правильность/идеальность данного механизма обновления. Но он у меня работает довольно таки стабильно - за 1,5 года использования данного модуля проблемы были только на этапе его тестирования так сказать. Ну и естественно, если происходит внезапное выключение компа, то тут придется вручную доработать.

И кстати данный модуль не подходит к приложениям, имеющим ограничение на кол-во запущенных экземпляров. В данном случае прибегаю к помощи либо батника, либо доп-го приложения нужного спец-но для обновления.
Сергей Д.
326 сообщений
#16 лет назад
Нафига???
Сначала надо всё скачать, подготовить, и только потом переименования... Я же дал принципиальное решение "самоубийства" / замены программы. Без всяких конкретностей, страховок, защит, без учёта конкретики. Зачем придумывать что-то своё, а потом это-же и критиковать?
Сергей С.
19 сообщений
#16 лет назад
Цитата:
Сначала надо всё скачать, подготовить, и только потом переименования... Я же дал принципиальное решение "самоубийства" / замены программы. Без всяких конкретностей, страховок, защит, без учёта конкретики. Зачем придумывать что-то своё, а потом это-же и критиковать?


А в чем принципиальная разница между переименованным файлом и непереименованным?
Сергей Д.
326 сообщений
#16 лет назад
И даже от внезапного выключения питания можно застраховаться!
Писать вариант решения, или сами придумаете?
Сергей С.
19 сообщений
#16 лет назад
Ну намекните уж тогда о вашем варианте такой страховки...
Сергей Д.
326 сообщений
#16 лет назад
Цитата ("sslab"):
А в чем принципиальная разница между переименованным файлом и непереименованным?

Так сам-же пишешь:
Цитата ("sslab"):

Если возникает ошибка при закачке и подобными вещами, то приложение переименовывает себя обратно в *.exe. Ну уж если же выключился комп, то тут либо докачку включай потом, либо если не хочешь докачивать новую версию, то сам вручную переименуй файл из *.bak в *.exe.


Ну и зачем "обратно переименовывать" и даже "вручную" иногда? Пока не скачалось обновление, пока программа не протестировала минимальную работоспособность обновления, до этих пор зачем переименовывать (убирать) exe-шник?
Сергей С.
19 сообщений
#16 лет назад
Ну если не переименовывать, то с каким расширением ты скачиваешь обновленную версию?
у меня в скачанном архиве с обновлением лежит ехе файл - вот для того и переименовываю запущенный в данный момент файл...
Сергей Д.
326 сообщений
#16 лет назад
Цитата ("sslab"):
Ну намекните уж тогда о вашем варианте такой страховки...

Например так...
Пользователь запускает только модуль start.exe.
Этот модуль проверяет наличие work_module.exe и запускает его.
work_module.exe - рабочая основная копия программы. Она-же проверяет наличие обновлений, скачивает их при необходимости.
Скаченные копии обновлений именуются например так: work_module.new.exe
После успешной закачки программа work_module.exe переименовывает work_module.exe в work_module.old.exe, потом переименовывает work_module.new.exe в work_module.exe
Всё!
Если отключается комп в то время когда уже нет work_module.exe, не беда. Модуль start.exe не обнаруживает рабочую копию и переименовывает work_module.new.exe в work_module.exe.
Сергей Д.
326 сообщений
#16 лет назад
Цитата ("sslab"):
Ну если не переименовывать, то с каким расширением ты скачиваешь обновленную версию?

Да какая разница? Хоть так: "SG AGS.esga.wsgfadsf_wsaf.wsf"
Сергей С.
19 сообщений
#16 лет назад
Цитата:
Да какая разница? Хоть так: "SG AGS.esga.wsgfadsf_wsaf.wsf"


Ну в принципе то понятно твое направление.
Игорь Чорноус
51 сообщение
#16 лет назад
Можно сделать очень просто ( если ещё нужно ), можно обновить программу в памяти и в файле, не перезапуская её. делается это с помощью апишной функцией криэйт ремоут тред. в новом треде перевыделяете нужные участки памяти, обновляете их согласно vers. ctrl. и потом передаёте управление на новую нужную функцию. я так делал в каком-то давнем проекте - всё было элегантно и глюков не вызывало
Раду М.
159 сообщений
#16 лет назад
Цитата ("sslab"):
А верный путь или нет, то отвечу так: нет ни одного идеального пути, нет ни одной идеальной программы - у всех есть свои недостатки.


Здрасти. А бэстпрактичес? А шаблоны разработки? А DDD с TDD? Или промышленные технологии разработки приложений среди индивидуальностей фриланса практически не применяются? Хотя если говорить о программах, а не о программистах, то бывают исключения.
Раду М.
159 сообщений
#16 лет назад
А вообще удивительный топик. Ответ уже давно был дан, а народ все обсуждает вариации...