Разностные обновления для пакетов приложений MSIXDifferential updates for MSIX app packages

Общие сведения об обновлении пакета приложения MSIXUnderstanding MSIX app package updates

При создании пакета приложения MSIX создается файл манифеста с подробными сведениями о файлах, включенных в этот пакет.When an MSIX app package are created, a manifest file is generated containing details related to the files included in the MSIX app package. При создании пакета создается часть метаданных и сохраняется в пакете с расширением MSIX или MSIXBUNDLE, что позволяет Windows однозначно идентифицировать части пакета.During package creation, a piece of metadata is created and stored in the .msix or .msixbundle package which allows parts of the package to be uniquely identified by the Windows. Затем при обновлении Windows может использовать файл метаданных для сравнения старого пакета c новым и определения частей, которые нужно скачать на устройство.Later on, during update, Windows can use this metadata file to compare the old package to the new package and determine the things that need to be downloaded to the device. Так как метаданные позволяют однозначно идентифицировать части пакета, это означает, что механизм выборочного обновления с любой версии пакета до любой другой версии пакета полностью работает (предполагается, что у исходного пакета более ранняя версия, чем у целевого).Given this metadata allows parts of the package to be uniquely identified, this means the differential update machinery fully functions from any version of a package to any other version of a package (assuming source package has a lower version than target package).

Все заключается в файле AppxBlockMap.xml (упомянутые выше метаданные).It all starts at the AppxBlockMap.xml file (the aforementioned metadata). Файл AppxBlockMap.xml представляет собой документ XML, содержащий двумерный список сведений о файлах в пакете.The AppxBlockMap.xml file is an XML document that contains a two dimensional list of information about files in the package. В первом измерении размещаются общие сведения о файле (например, имя и размер), а во втором — хэш-код SHA2-256 каждого среза (размером 64 КБ) этого файла ("блок").The first dimension lays out high level details on the file (e.g. name and size) and the second dimension provides SHA2-256 hash representations of each 64KB slice of that file (aka the "block").

Первый хэш-код представляет первый блок (64 КБ) файла, а второй хэш-код — остальные 35 КБ с учетом того, что размер этого файла составляет 101188 байта.The first hash represents the first 64KB block of the file and the second hash represents the remaining 35KB - given the file is 101188 bytes.

Если при обновлении вносятся изменения во второй блок этого файла, хэш также будет обновлен соответствующим образом.During an update, if the second block of that file was modified, the hash would also be updated to reflect this fact. Компонент скачивания распознает изменения, извлекает второй блок и повторно использует первый блок без изменений из старого пакета.The download component understands this and will only pull down the second block and reuse the first unchanged block from the old package.

Кроме того, если не изменился весь файл (что определяется по отсутствию изменений во всем наборе блоков), то этот файл можно и далее использовать из существующего пакета, что позволяет значительно сэкономить пользователям Windows 10.Furthermore, if an entire file hasn't changed (which is determined by the full set of blocks not changing) then that file can be reused from the existing package - resulting in tremendous savings for Windows 10 users

Обновление до более новых версийUpgrading to newer versions

При установке более новой версии пакета приложения MSIX происходит сравнение файла манифеста и определение измененных блоков файла.When a newer version of the MSIX app package is installed, the manifest file is compared and modified file blocks are identified. При обновлении пакета приложения MSIX до более новой версии извлекаются только изменяемые файлы, чтобы уменьшить потребление пропускной способности, если обновляемые приложения находятся в общей сетевой папке или вне сети организации.As the MSIX app package is upgraded to the newer version only the modified files are retrieved decreasing the bandwidth consumption if updated applications reside on a network share or external to an organization.

Переход на более старые версииUpgrading to older versions

При установке более старой версии пакета приложения MSIX происходит сравнение файла манифеста и определение измененных блоков файлов.When an older version of the MSIX app package is installed, the manifest file is compared and modifed file blocks are identified. При переводе пакета приложения MSIX на более старую версию извлекаются только изменяемые файлы, чтобы уменьшить потребление пропускной способности, если обновляемые приложения находятся в общей сетевой папке или вне сети организации.As the MSIX app package is upgraded to the older version only the modified files are retrieved decreasing the bandwidth consumption if updated applications reside on a network share or external to an organization.

Оптимизация обновленияOptimizing upgrade experiences

Процесс установки пакета приложения MSIX на устройстве можно настроить, чтобы улучшить работу для пользователя.The delivery or installation of an MSIX app package to a device can be configured to improve the users experience. При развертывании приложения на устройстве установщик можно настроить обновлять приложение, когда его закроет пользователь, или принудительно закрывать и обновлять приложение.When an app is deployed the device can be configured to update the app after the user closes the app , or force the application to be closed and update the app forcably.

PowerShellPowerShell

При установке пакета приложения MSIX на устройстве с помощью PowerShell используется командлет add-appxpackage.Installing an MSIX app package to a device using PowerShell leverages the add-appxpackage cmdlet. Этот командлет содержит следующие параметры, которые изменяют процесс установки или обновления пакета приложения MSIX.This cmdlet contains the following parameters which alter the MSIX app package installation or upgrade user experience.

-DeferRegistrationWhenPackagesAreInUse-DeferRegistrationWhenPackagesAreInUse Указывает, что этот командлет будет предотвращать обновление пакета приложения MSIX, пока пользователь не закроет приложение.Indicates that this cmdlet will prevent the MSIX app package from updating while the user currently has the app open.
-ForceApplicationShutdown-ForceApplicationShutdown Указывает, что этот командлет принудительно завершает работу всех активных процессов, связанных с пакетом или его зависимостями.Indicates that this cmdlet forces all active processes that are associated with the package or its dependencies to shut down
-ForceUpdateFromAnyVersion-ForceUpdateFromAnyVersion Указывает, что пакет приложения MSIX принудительно сохранит в промежуточном хранилище или зарегистрирует определенную версию пакета, независимо от того, размещена или зарегистрирована ли уже более поздняя версия.Indicates that the MSIX app package will force a specific version of a package to be staged/registered, regardless of whether a higher version is already stages/registered.
-InstallAllResources-InstallAllResources Указывает, что командлет принудительно выполняет развертывание всех пакетов ресурсов, указанных в аргументе объединенного пакета.Indicates that the cmdlet forces the deployment of all resource packages specified from a bundle argument. Этот параметр переопределяет проверку применимости ресурсов для подсистемы развертывания и принудительно сохраняет в промежуточном хранилище все пакеты ресурсов.This overrides the resource applicability check of the deployment engine and forces staging of all resource packages.
-RetainFilesOnFailure-RetainFilesOnFailure Если для этого параметра задано значение true, в случае сбоя развертывания файлы, созданные на целевом компьютере во время установки, не удаляются.In the case of a failed deployment, if this switch is set to True, files that have been created on the target machine during the installation process are not removed.
-Update-Update Указывает, что добавляемый пакет является обновлением пакета зависимостей.Specifies that the package being added is a dependency package update. Пакет зависимостей удаляется при удалении родительского приложения.A dependency package is removed when the parent app is removed. Если этот параметр не указан, пакет не будет удален при удалении родительского приложения.If not specified, the package will not be removed when the parent app is removed.

Полный список параметров, доступных для этого командлета, см. в статье для PowerShell add-appxpackage.For a full list of parameters available for this cmdlet, please visit the PowerShell article on add-appxpackage.