Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обновление современных пакетов приложений Windows оптимизировано, чтобы обеспечить скачивание только важных измененных битов приложения для обновления существующего приложения Windows.
Метаданные в файле AppxBlockMap.xml
На высоком уровне во время создания пакета создается элемент метаданных и хранится в файле пакета приложения (.appx или .msix), что позволяет Windows однозначно идентифицировать части пакета. При обновлении пакета приложения Windows использует файл метаданных для сравнения старого пакета с новым пакетом и определения того, что нужно скачать на устройство.
Так как метаданные позволяют определить части пакета однозначно, это означает, что механизм разностного обновления полностью работает от любой версии пакета к любой другой версии пакета (если исходный пакет имеет более низкую версию, чем целевой пакет).
Метаданные содержатся в файле AppxBlockMap.xml (указанные выше метаданные). Файл AppxBlockMap.xml — это XML-файл, содержащий двухмерный список сведений о файлах в пакете. Первое измерение содержит подробные сведения о файле (например, имя и размер), а второе измерение предоставляет хэш-представления SHA2-256 каждого 64 КБ этого файла (блок).
Ниже приведен пример файла AppxBlockMap.xml.
<!--?xml version="1.0" encoding="UTF-8"?-->
<blockmap hashmethod="http://www.w3.org/2001/04/xmlenc#sha256"
xmlns="http://schemas.microsoft.com/appx/2010/blockmap">
<file lfhsize="66" size="101188" name="asset1.jpg">
<block hash="2bidNE0JyaO+FjaTpRe0g8HzUCblUf/cfBcTXiZR74c="/>
<block hash="+jeFwKrGk5gw9wSICWsWRtEQXwcLC7af4EWS7DgrAkY="/>
</file>
<file lfhsize="61" size="108823" name="asset2.jpg">
<block hash="u0+5S0GOzwyAfYx54tKycZyHRBYm2ybvq27dkIKqDsQ="/>
<block hash="F9h0FRMetL6BNCszAYB0bgyx2KWN+dO1bls4Q9m267c="/>
</file>
...
</blockmap>
Первый файл (asset1.jpg) имеет два хэша блоков. Первый хэш представляет первый блок 64 КБ файла, а второй хэш представляет оставшиеся 35 КБ, если файл равен 101188 байтам.
Во время обновления, если второй блок этого файла изменен, хэш также обновляется, чтобы отразить это. Компонент скачивания извлекает второй блок и повторно использует первый без изменений из старого пакета.
Если весь файл не изменяется (определяется полным набором блоков, не изменяющихся), этот файл можно повторно использовать из существующего пакета, экономя время и ресурсы.
Ограничения обновления приложений
Обновления выполняются в одном семействе пакетов
Имя семейства пакетов состоит из имени пакета и Publisher. Чтобы иметь возможность обновлять, новые метаданные пакета должны быть одинаковыми, как и ранее установленный пакет. Ниже приведен пример имени семейства пакетов: Contoso.ContosoApp_8wekyb3d8bbwe
Обновления приложений должны подниматься до более высокой версии.
Как правило, обновления приложений требуют, чтобы версия нового пакета была выше текущей. Процесс обновления приложения не позволит устанавливать пакеты с более низкими версиями по умолчанию. Начиная с Windows 10 версии 1809, можно использовать ForceUpdateToAnyVersion, чтобы разрешить установку пакетов с более низкими версиями, когда параметр переопределения предоставлен в составе аргументов обновления. В настоящее время он доступен в PowerShell с помощью параметра ForceUpdateFromAnyVersion , через API PackageManager, EnterpriseModernAppManagement CSP и в файле AppInstaller.
Замечание
Если вы используете ForceUpdateToAnyVersion в приложении из магазина Windows, клиентский компонент Центра обновления Windows автоматически обновится до последней применимой версии.
Пакет обновления приложений может иметь другую архитектуру
Пакет обновления для установленного в настоящее время пакета приложения может иметь другую архитектуру, если новая архитектура поддерживается в ОС, в которой она развертывается. Например, если у вас установлена версия MyFavApp(v1.0.0.0.0) на устройстве x64 Windows 10, а пакет обновления (v2.0.0.0.0) — версия x64: MyFavApp(1.0.0.0.0) будет успешно обновлена до MyFavApp(v2.0.0.0.0).
Пакеты могут обновляться с MSIX на MSIXbundle
Пакет обновления может переходить от пакета MSIX к пакету MSIXbundle, но не наоборот. При установке MSIXbundle обновление пакета должно остаться в виде комплекта.
Оптимизация технологии разностного обновления
Существует несколько способов обеспечить оптимизацию технологии разностного обновления до максимальной.
- Сохраните файлы в пакете небольшими — это позволит убедиться, что при необходимости изменения, влияющие на полный файл, обновление по-прежнему будет небольшим.
- Изменения в файлах должны быть аддитивными, если это возможно, чтобы гарантировать, что устройства конечных пользователей загружают только измененные блоки.
- Если возможно, изменения файлов следует ограничивать блоками по 64 КБ. Если ваше приложение имеет большие файлы и требует изменений в середине файла, ограничение изменений набором блоков значительно поможет.