Andrey Helldar @Helldar
Senior PHP Developer
Information
- Rating
- 4,853-rd
- Location
- Россия
- Date of birth
- Registered
- Activity
Specialization
Backend Developer
Lead
From 350,000 ₽
PHP
MySQL
Git
OOP
Docker
Redis
SQL
Laravel
Elasticsearch
Senior PHP Developer
Все это дело сохраняется в файл и по завершении работы программы архивируется. Архив в последствии пользователь может сам передать разработчику, так как функции автоматической отправки я не делал.
Спасибо за объяснение!
Попробую сегодня запустить под обычным юзером на другой машине, сообщу о результатах.
И здесь мне пришла мысль о том, что если ПО не может скачать файл исполняемой программы, то она будет выводить уведомление об этом (не каждый раз, а, скажем, раз в 5 дней) и открывать прямую (или не прямую) ссылку в браузере для скачивания данного файла.
А прочитав Ваш комментарий, возникло желание добавить функцию резервного обновления по следующему принципу:
— Основной апдейтер полностью вынести во внешний файл (как писалось в других комментариях не раз), а в теле основной программы оставить функцию резервного обновления.
Таким образом можно решить проблему с некорректным обновлением.
«Ученье — свет, а неученье — чуть свет и на работу» (с)
Я хоть и новичок в этой среде, но уже успел понять, что неважно с какой буквы функция начинается, главное — чтобы она при вызове была 1 в 1 с названием.
А раз функция, начинающаяся с маленькой буквы, работает, то и ее можно отнести к исключениям?
Вот так код работает стабильно:
С маленькой же буквы начинается…
Исходя из этого могу предположить, что в документации лишь рекомендуемые понятия, а не принудительно выполняемые.
Windows 7 x64. Скопировал файл в папку «c:\Program Files\myProgram\» — запустил.
Прога скачала все необходимые библиотеки с сайта, перезапустилась, нашла обновление — скачала, предложила обновиться — согласился. Обновилась, перезапустилась…
… ни единой ошибки! :)
Раз так, то и нижеприведенную функцию оцените, если желание будет:
В параметре функции передается имя файла, для которого необходимо посчитать CRC-сумму, а во втором контрольная сумма, полученная с сайта (размещена в файле version.xml как дополнительный аттрибут).
Суть проста — считываем CRC-сумму файла и сравниваем ее с полученной с сайта. Если суммы совпадают, выводится true, если нет — false.
Вот только проблема в том, что сумма рассчитывается как-то не так — еще ни разу она не совпала. Уже голову сломал в чем проблема…
На сайте файл хранится под именем launcher.exe, локально — launcher.update.
Пробовал локально посчитать суммы обоих файлов — они одинаковы. Уже голова не варит что может быть. Может, подопнете в нужном направлении? Буду рад :)
Излишнее его использование, согласен, вредит. А если в меру, то почему бы и нет?
Поэтому соглашусь что использование QR-кода в качестве дополнительной ссылки для
не людейустройств — это есть хорошо.При поиске информации очень часто добавляют язык C# в запросе, дабы найти нужное и, поверьте, если ввести в любом поисковике запрос «автоматическое обновление C#», то вряд ли человек будет иметь ввиду Windows Phone.
Кто сказал, что самостоятельно придуманные методы начинаются с большой буквы? Это все глупый стереотип! Как метод ни назови — главное, чтобы он вызывался. Вот если бы в одном месте было написано «download», а в другом — «Download», тогда да, а в данном случае не пойму почём звон.
И по Вашему комментарию в целом: Вы сможете лучше? Примеры приведете? Думаю, многие были бы рады взглянуть на мастер-класс от профи…
P.S.: Если бы данный код был абсолютно совершенен, то вряд ли я стал его выкладывать на всеобщее…
По поводу использования описанного метода в других приложениях, можно сам код апдейтера полностью вынести во внешний файл и, для универсальности, при запуске добавлять параметры где лежат обновления и какой файл заменять.
Часть проблем описал потому, что именно на них акцентировали внимание комментарии, некоторые же проблемы (вроде предложения BITS, windows installer и ClickOnce) нецелесообразны в моем проекте.
Да, возможно при создании универсального кода они найдут место, но, ведь, пример-то не на универсальность мной приводился, а на наглядное представление принципа автоматического обновления ПО.
Метод проверки целостности файла довольно примитивен: берем файл и считываем из него версию, если файл поврежден — это неизбежно вызовет ошибку. Легко и просто, нежели добавлять дополнительный код проверки CRC-суммы. Во всяком случае, в моем проекте нет нужды использовать более сложные методы, а так да, Вы правы, нужно использовать проверку контрольной суммы.
Опять же смотря где. В моем случае при полном отказе от обновлений возможна некорректная работа программы, так как обновления включают в себя не только файл основной программы, но и сторонние библиотеки, методы в которых могут добавляться, как и их вызов из основного приложения.
По «в-третьих» — CRC-код добавлял, но либо у меня руки кривые, либо одно из двух — суммы не совпадают. Над этим вариантом я еще думаю где ошибка.
Если приложение используется как вторичное, то само устанавливаться оно не будет, вот и используются вышеописанные методы.
В любом случае, любому новичку, я так думаю, данный пример пригодится.