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

50 сообщений
#16 лет назад
А почему нельзя сгенерить бат-файл с именем gettempfilename? примерное содержимое батника:timeout 1
ren "oldfilepathname" "newfilename"
erase "%0"
батник этот запускается при выходе из проги(естественно, с параметром "ниразунешоу"

это если вас очень уж ломает перезагружаться после апдейта (inuse /?

626 сообщений
19 сообщений
#16 лет назад
Цитата:А что будет, если программа переименует себе в имя.bak, и тут вдруг что-то случится и компьютер выключится? Или по какой-то причине обновление не скачается, или скачается с ошибкой, или не встанет?
IMHO, переименование себя - принципиально неверный путь.
Если возникает ошибка при закачке и подобными вещами, то приложение переименовывает себя обратно в *.exe. Ну уж если же выключился комп, то тут либо докачку включай потом, либо если не хочешь докачивать новую версию, то сам вручную переименуй файл из *.bak в *.exe.
19 сообщений
#16 лет назад
А верный путь или нет, то отвечу так: нет ни одного идеального пути, нет ни одной идеальной программы - у всех есть свои недостатки. Я ни в коем случае не претендую на правильность/идеальность данного механизма обновления. Но он у меня работает довольно таки стабильно - за 1,5 года использования данного модуля проблемы были только на этапе его тестирования так сказать. Ну и естественно, если происходит внезапное выключение компа, то тут придется вручную доработать.И кстати данный модуль не подходит к приложениям, имеющим ограничение на кол-во запущенных экземпляров. В данном случае прибегаю к помощи либо батника, либо доп-го приложения нужного спец-но для обновления.
326 сообщений
#16 лет назад
Нафига???Сначала надо всё скачать, подготовить, и только потом переименования... Я же дал принципиальное решение "самоубийства" / замены программы. Без всяких конкретностей, страховок, защит, без учёта конкретики. Зачем придумывать что-то своё, а потом это-же и критиковать?
19 сообщений
#16 лет назад
Цитата:Сначала надо всё скачать, подготовить, и только потом переименования... Я же дал принципиальное решение "самоубийства" / замены программы. Без всяких конкретностей, страховок, защит, без учёта конкретики. Зачем придумывать что-то своё, а потом это-же и критиковать?
А в чем принципиальная разница между переименованным файлом и непереименованным?
326 сообщений
#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? Или промышленные технологии разработки приложений среди индивидуальностей фриланса практически не применяются? Хотя если говорить о программах, а не о программистах, то бывают исключения.