Pull to refresh
33
0
Andrey Helldar @Helldar

Senior PHP Developer

Send message
Вчера переписал часть кода по проверке версий с использованием System.Version…
Первое что бросилось в глаза — функция работает и также соглашусь со словами:
Незнание мной стандартной библиотеки .NET, очевидно :)
Чтобы окно выдавало сообщение с просьбой сохранить файлы/завершить работу, передается функция
myProcesses[i].CloseMainWindow();

А если именно завершить процесс, то:
myProcesses[0].Kill();

И, как показала практика запуска приложения на нескольких машинах, эта функция работает.
Правда, 1 из 10 раз приложение действительно зависало, предлагая отправить отчет разработчику ОС…
Основная программа при запуске проверяет версию updater.exe на сайте и, если найдет, скачивает. Уже после этого проверяет обновления себя самой.

Чуть не забыл: также программа обновляет (а если файлов нет — скачивает) дополнительные библиотеки, необходимые для работы ПО.
Только подумал про Google Chrome. Хотя у них немного другой алгоритм реализован — в папку скачивается программа, а «стартер» (ака лаунчер браузера) запускает имя клиента которого является самым новым. Можно, конечно, старые файлы удалять, но вот зачем?
В плане браузерной ОС это хорошо, а в моем случае не комильфо.
А зачем такие сложности? У меня куда проще — скачал обновление, запустил второй процесс, который заменил файл основной программы, и вновь запустил его, а сам закрылся.
Самоучка я) Не в курсе как в ВУЗах преподают. Лично мне хватает, а по замечаниям учту. Спасибо!

По поводу «бега» — вспомогательная сначала проверяет завершился ли процесс, если нет — сама его принудительно выгружает и как только процесс закроется, после этого начинает обработку обновлений.
Не поверишь — было: тихо скачиваем, тихо устанавливаем, громко перезапускаем прогу без каких-либо вопросов.
Заказчик попросил это уведомление добавить.
А по поводу выбора «обновить сейчас» или «потом» — добавлю такую кнопочку…
Windows Installer не пройдет по причине того, что конкретный пример статьи основан на модпаке для игры и является лишь лаунчером, а установка самого модпака осуществляется другими средствами. Вряд ли пользователям будет удобно устанавливать модпак и потом дополнительно еще и лаунчер к нему — это не целесообразно.
Это верно, хотя в моем случае программы имеют версию, состоящую из 4-х цифр: 0.0.0.0
Как говорится, век живи — век учись :)
Я новичок в данном языке (всего около года пишу), хотя уровня моих знаний вполне хватает для написания стабильных приложений, а улучшать не всегда есть время. Это жаль.
За подсказку спасибо! Сегодня потестирую.
Спасибо за наводку, изучу материал и приму решение изменять ли мне код и принцип обновления ПО.
Честно сказать, мне мой код проще будет, нежели такой метод.
Возможно, попробую улучшить его, а пока действую по правилу №1: «Работает — НЕ ТРОГАЙ».
Прочитав статью на MSDN, сделал вывод, что приложение устанавливать надо через установщик Windows в то время как указанный метод сразу заменяет файл безо всякой установки. На мой взгляд, этот метод удобней и быстрей. Хотя кому как.
Поэтому для реализации мой метод и использую в приведенном виде.
Файл myprogram скачивает файл, затем запускает другой, чтобы тот сам все переименовал и вновь запустил основную программу.
12 ...
27

Information

Rating
4,857-th
Location
Россия
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead
From 350,000 ₽
PHP
MySQL
Git
OOP
Docker
Redis
SQL
Laravel
Elasticsearch