Как обновить игру на компьютере

Обновлено: 04.07.2024

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 различных программ.

winget upgrade

Для каждой программы указано название, идентификатор, установленная и доступная версия. Доступная версия должна быть новее установленной.

Обновите все устаревшие программы в Windows 10 с помощью Winget

Хотя вы можете обновлять отдельные программы, используя команду winget upgrade навзание_программы, например:

winget upgrade

Вы также можете использовать команду winget upgrade --all для обновления всех устаревших программ за один раз с помощью одной команды.

Параметр по умолчанию отображает установщики каждой программы, но вы можете добавить параметр -h для тихой установки обновления. Однако, не все программы отображают окна или параметры во время установки.

Команда тихой установки обновления всех поддерживаемых программ будет выглядеть следующим образом:

winget upgrade

После обновления программ повторно запустите команду winget upgrade , чтобы проверить, все ли обновления для устаревших программ были установлены на устройстве. Пользователи Windows 10, которые хотят иметь больший контроль, могут вместо обновления всех программ с помощью одной команды запускать обновления по отдельности.

Менеджер пакетов Windows Package Manager – хорошее решение для обновления устаревших программ. Как и любая другая программа подобного рода, она ограничена программами, которые находятся в ее базе данных. Хотя можно создать собственный репозиторий и поддерживать список программ, использующих его – но это требует слишко большой работы.

Обновления в Microsoft Store

Существует небольшая задержка между выпуском обновлений и их появлением на вашем компьютере или устройстве Windows 10. Но хорошо что есть возможность принудительной проверки и установки обновлений, особенно когда функционал авто-обновлений приложений отключен. Наше руководство поможет выполнить проверку обновлений приложений и игр в Магазине Microsoft:

Ручная проверка обновлений для игр и приложений магазина Microsoft Store

Убедитесь, что вы подключены к Интернету и служба обновлений не отключена, а затем откройте Microsoft Store через меню "Пуск" или выполните поиск.

Меню "Пуск"

В приложении Microsoft Store откройте выпадающее меню, нажав три точки в правом верхнем углу, и кликните мышкой "Загрузки и обновления".

Загрузки и обновления Microsoft Store

На открытой странице, можно увидеть "Доступные обновления" и "Недавние действия". Приложения и игры, которые вы недавно загрузили с помощью Магазина Microsoft, и когда они были в последний раз изменены.

Если вам необходимо запустить обновления вручную и установить все доступные, нажмите по кнопке "Получить обновления".

Получить обновления

Microsoft Store начинает проверку и установку обновлений. Вы увидите ход выполнения каждого приложения и игры. При желании можно приостановить одно или несколько обновлений, нажав на "Паузу". Если возникнет ошибка, просто нажмите значок "Обновить" и попробуйте снова.

Скачивание обновлений

Как можно видеть выше, выполнить ручную проверку и установку обновлений игр и приложений Магазина Майкрософт очень просто и легко.

Для DCS World с нашего сайта
Игра проверяет наличие обновлений при каждом запуске. Вы можете и отказаться от автоматического обновления, если имеете на то причины. Пожалуйста, не забудьте сделать это позднее.

Самую свежую версию DCS World и самый свежий файл апдейтера - DCS_updater.exe - можно найти на странице: Обновления DCS World. Если Вы обнаружили, что версия Вашего апдейтера не актуальна, пожалуйста, скачайте последнюю версию и, разархивировав пакет, вручную замените апдейтер в папке \DCS World\Bin
Если необходимо принудительно обновить игру, то это можно сделать либо
через меню «Пуск»: Пуск - Все программы - 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\bin\ используя командную строку (CMD) : DCS_updater.exe repair

Для 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. Изменить на игровом сервере номер актуальной версии на номер только что закачанной. Вуаля!

С этого момента при обновлении люди будут получать новую версию.

Ну а папки со старыми билдами на сервере можно удалить, чтобы не занимали место.

Заключение

Конечно, моя система обновления не идеальна и не лишена недостатков. Например, если в клиенте какой-то файл был удалён — у игроков он останется. Если файл был переименован — он будет загружен как новый, а старый экземпляр не будет удалён. Можно, конечно, доработать утилиту обновления, добавив в список файлов команды для удаления/переименования файлов, но вообще такие проблемы для моей игры неактуальны, так что я не стал заморачиваться.

Читайте также: