Как обновить игру на компьютере
Windows Package Manager (winget) – менеджер пакетов для удобной автоматизации процессов установки, обновления и управления программами.
Совсем недавно компания Microsoft выпустила первую финальную версию приложения Windows Package Manager. Новейшая версия winget добавляет в Windows новые возможности для установки, удаления и управления программами.
В этом руководстве мы подробно рассмотрим функцию обновления программ. В отличие от большинства менеджеров пакетов Windows, Windows Package Manager обладает важным достоинством – обновление не ограничивается программами, установленными с помощью менеджера пакетов. Windows Package Manager позволяет обновлять программы, установленные из любых источников, но данные программы должны быть в репозитории Windows Package Manager.
Кроме того, менеджер пакетов Windows Package Manager (winget) может обновить установленные программы с помощью всего одной команды.
Как обновить установленные программы с помощью Windows Package Manager (winget)
После установки winget откройте PowerShell от имени Администратора или же воспользуйтесь программой Windows Terminal.
Запустите команду winget upgrade , чтобы получить список программ, для которых доступны обновления. Распознавание установленных программ зависит от используемого репозитория. В репозитории сообщества по умолчанию на момент написания статьи содержится более 1500 различных программ.
Для каждой программы указано название, идентификатор, установленная и доступная версия. Доступная версия должна быть новее установленной.
Обновите все устаревшие программы в Windows 10 с помощью Winget
Хотя вы можете обновлять отдельные программы, используя команду winget upgrade навзание_программы, например:
Вы также можете использовать команду winget upgrade --all для обновления всех устаревших программ за один раз с помощью одной команды.
Параметр по умолчанию отображает установщики каждой программы, но вы можете добавить параметр -h для тихой установки обновления. Однако, не все программы отображают окна или параметры во время установки.
Команда тихой установки обновления всех поддерживаемых программ будет выглядеть следующим образом:
После обновления программ повторно запустите команду winget upgrade , чтобы проверить, все ли обновления для устаревших программ были установлены на устройстве. Пользователи Windows 10, которые хотят иметь больший контроль, могут вместо обновления всех программ с помощью одной команды запускать обновления по отдельности.
Менеджер пакетов Windows Package Manager – хорошее решение для обновления устаревших программ. Как и любая другая программа подобного рода, она ограничена программами, которые находятся в ее базе данных. Хотя можно создать собственный репозиторий и поддерживать список программ, использующих его – но это требует слишко большой работы.
Существует небольшая задержка между выпуском обновлений и их появлением на вашем компьютере или устройстве Windows 10. Но хорошо что есть возможность принудительной проверки и установки обновлений, особенно когда функционал авто-обновлений приложений отключен. Наше руководство поможет выполнить проверку обновлений приложений и игр в Магазине Microsoft:
Ручная проверка обновлений для игр и приложений магазина Microsoft Store
Убедитесь, что вы подключены к Интернету и служба обновлений не отключена, а затем откройте Microsoft Store через меню "Пуск" или выполните поиск.
В приложении Microsoft Store откройте выпадающее меню, нажав три точки в правом верхнем углу, и кликните мышкой "Загрузки и обновления".
На открытой странице, можно увидеть "Доступные обновления" и "Недавние действия". Приложения и игры, которые вы недавно загрузили с помощью Магазина Microsoft, и когда они были в последний раз изменены.
Если вам необходимо запустить обновления вручную и установить все доступные, нажмите по кнопке "Получить обновления".
Microsoft Store начинает проверку и установку обновлений. Вы увидите ход выполнения каждого приложения и игры. При желании можно приостановить одно или несколько обновлений, нажав на "Паузу". Если возникнет ошибка, просто нажмите значок "Обновить" и попробуйте снова.
Как можно видеть выше, выполнить ручную проверку и установку обновлений игр и приложений Магазина Майкрософт очень просто и легко.
Для DCS World с нашего сайта
Игра проверяет наличие обновлений при каждом запуске. Вы можете и отказаться от автоматического обновления, если имеете на то причины. Пожалуйста, не забудьте сделать это позднее.
Если необходимо принудительно обновить игру, то это можно сделать либо
через меню «Пуск»: Пуск - Все программы - Eagle Dynamics - DCS World (OpenBeta) - Обновить DCS World (OpenBeta),
либо непосредственно из папки с игрой - \DCS World\bin\ используя командную строку (CMD) : DCS_updater.exe update
Там, удерживая левую клавишу Shift, щелкните правой кнопкой мыши и нажмите «Открыть окно Powershell здесь» (окно команд - в старых версиях Windows).
Затем введите в окно команд следующее, в точности как напечатано:
.\DCS_updater.exe update (точка, слеш и т.д.)
Для DCS World от Steam процесс автоматический.
Как восстановить игру, если что-то перестало работать?
Для DCS World с нашего сайта
Через меню «Пуск». Пуск - Eagle Dynamics - DCS World (OpenBeta) - Восстановить DCS World (OpenBeta).
Для DCS World от Steam
Щёлкнуть правой клавишей мыши по игре DCS World в Вашей библиотеке. В выпавшем меню выбрать "Свойства". В появившемся окне перейти на вкладку "Локальные файлы". Нажать на кнопку "Проверить целостность кэша"
Удалите Ваши неофициальные пользовательские моды, если они у Вас есть, и сделайте резервную копию любых изменений.
Перейдите в папку Eagle Dynamics\DCS World [или openbeta]\bin.
Там, удерживая левую клавишу Shift, щелкните правой кнопкой мыши и нажмите «Открыть окно Powershell здесь» (окно команд - в старых версиях Windows).
Затем введите в окно команд следующее, в точности как напечатано:
.\DCS_updater.exe cleanup (точка, слеш и т.д.)
Это удалит все неофициальные файлы
теперь аналогично запустите ремонт dcs
Также Вы можете использовать командные файлы прямо в корневой папке DCS World.Пожалуйста, скачайте файлы DCS_updater_cleanup.bat и DCS_updater_repair.bat
а затем запустите их один за другим, чтобы сначала очистить, а затем восстановить Игру.
Что-то блокирует вам доступ к серверу обновлений. На время отключите ваш антивирус и проверьте настройки файервола на вашем роутере.
В этой статье я расскажу о том, как я сделал систему автообновления клиентской онлайн-игры. Ссылка на исходники (Delphi) в конце статьи. На самом деле такую фичу я реализовал в двух своих играх, и если первый блин вышел немного комом (в игре Spectromancer), то вторая реализация получилась весьма удобной и эффективной. Это моя первая статья на Хабре, так что сильно не бейте, а лучше укажите на недостатки в комментариях :)
Алгоритм обновления игры
- Проверка версии на необходимость обновления.
- Скачивание списка файлов актуальной версии.
- Скачивание новых или изменённых файлов во временную папку.
- Установка обновления — приведение файлов установленного клиента в соответствие со списком.
- Запуск обновлённого клиента.
Проверка версии
Первым делом при запуске клиент спрашивает у сервера номер актуальной версии (X) и номер минимально допустимой без обновления (Y). Если версия клиента не ниже Y, то обновление не требуется, в противном случае клиент запускает утилиту обновления "GetNewVersion.exe X", а сам завершает работу.
Как видим, номер версии передаётся параметром — это позволяет при желании обновить игру до любой доступной на сервере версии, и даже понизить её. Если параметр не передать — утилита сама запросит у сервера номер актуальной версии. Номер версии — это просто целое число, схема нумерации может быть любой, например у меня версия 1.12 соответствует номеру 1120.
Скачивание списка файлов
Зная номер версии, утилита обновления скачивает список файлов по адресу: [base_ur]>/[версия]/filelist
Это просто список файлов в формате CSV с указанием контрольных сумм, а также размеров в сжатом и несжатом виде, каждая строчка выглядит в нём примерно так:
18*Priest.tga;1053151921D9;91719;107372
Здесь «18*» означает, что 18 символов в имени файла такие же как и у предыдущего файла. Поскольку файлы обычно идут в алфафитном порядке, а пути могут быть длинными — это существенно экономит размер файла-списка. Для веб-сервера, на котором не включена компрессия, это означает, что файл скачается быстрее и обновление начнётся раньше.
Скачивание новых или изменённых файлов
Мы не знаем насколько устарел клиент игры, возможно какие-то файлы изменены или удалены вручную. Скачивать лишнее мы тоже не хотим, поэтому получив список файлов, утилита начинает проверять их по порядку на необходимость обновления: если в папке игры файл отсутствует или его контрольная сумма отличается — файл добавляется в очередь на скачивание. Параллельно может загружаться не более 2-х файлов — этого вполне достаточно, чтобы с одной стороны загрузка не тормозила, а с другой, происходила последовательно.
Особая тема — отображение прогресса. Пока не обработан весь список, мы точно не знаем сколько файлов предстоит скачать и какого они размера. Однако как только первый файл поставлен на загрузку, мы уже можем отобразить какую-то информацию. Фактически, прогресс отображает очередь загрузки: сколько всего предстоит скачать и сколько уже скачано.
Скачанные файлы сразу же распаковываются и сохраняются во временной папке, для сжатия я использую библиотеку zlib .
Когда весь список файлов обработан и все загрузки завершились, утилита проверяет наличие файла changes.txt и если он есть — отображает его. Пользователю предлагается начать процедуру обновления. До нажатия кнопки «Update» никаких изменений в папке игры ещё не сделано, так что можно без проблем отказаться.
Кстати, если пользователь прервёт загрузку или откажется от установки, то в следующий раз ему не придётся скачивать все файлы заново: перед скачиванием очередного файла утилита проверяет его наличие во временной папке и если контрольная сумма совпадает — загрузка считается состоявшейся.
А вот при нажатии на «Update» утилита запускает другую утилиту — "InstallUpdate.exe", а сама завершает работу.
Установка обновления
Зачем нужна ещё одна утилита? Всё просто: для обновления файлов игры нужно выполняться с правами администратора. А для скачивания обновления это, наоборот, противопоказано. Потому что, если только вы не счастливый обладатель EV-сертификата подписи кода, запуск процесса с правами администратора приводит к показу окна UAC. А если при запуске игры, вместо привычного интерфейса игрок видит такое:
… то это, как минимум, повод насторожиться, а то и вовсе отказаться от запуска. Другое дело, при ручном согласии на установку обновления — в таком контексте окно UAC воспринимается нормально. К сожалению, процесс в Windows не может повысить свои права во время выполнения — это свойство неизменно с момента запуска. Поэтому я использую два отдельных файла. На самом деле GetNewVersion.exe и InstallUpdate.exe — это и вовсе одна и та же утилита, файлы идентичны. А действие определяется передаваемыми параметрами и именем исполняемого файла.
Итак, будучи запущенным, InstallUpdate копирует файлы клиента игры из временной папки в папку игры, а затем запускает обновлённый клиент и завершает работу. При этом может быть обновлён и файл GetNewVersion.exe .
Все действия, а также возникающие ошибки, подробно логируются в журнале, это весьма полезно для отладки.
Процесс подготовки новой версии
Мы рассмотрели схему работы обновления с точки зрения клиента игры, но как заставить всё это работать? Для подготовки новых билдов я написал ещё одну утилиту — CompressBuild. Она рекурсивно сканирует папку, сжимает файлы методом Deflate, а информацию о них заносит в список файлов — filelist . После сжатия к имени файла дописывается символ "_". Сжатые файлы повторно не сжимаются, поэтому при необходимости в папке билда можно обновить лишь отдельные файлы, CompressBuild обновит только их.
Некоторые файлы в клиенте игры изменяются в процессе работы, например, содержат настройки. Такие файлы нужно игнорировать, соответствующие шаблоны утилита берет из файла exclude. То есть эти файлы просто не попадают в filelist и не портятся на клиенте при обновлении.
Таким образом, чтобы подготовить новый билд, мне нужно:
1. Скопировать папку \master в папку \[номер_версии]
2. Запустить CompressBuild, который запакует в ней файлы и составит их список.
3. Закачать всё это на сайт игры.
4. Изменить на игровом сервере номер актуальной версии на номер только что закачанной. Вуаля!
С этого момента при обновлении люди будут получать новую версию.
Ну а папки со старыми билдами на сервере можно удалить, чтобы не занимали место.
Заключение
Конечно, моя система обновления не идеальна и не лишена недостатков. Например, если в клиенте какой-то файл был удалён — у игроков он останется. Если файл был переименован — он будет загружен как новый, а старый экземпляр не будет удалён. Можно, конечно, доработать утилиту обновления, добавив в список файлов команды для удаления/переименования файлов, но вообще такие проблемы для моей игры неактуальны, так что я не стал заморачиваться.
Читайте также: