What is the MSIX Bundle and how to create and manage it?
Microsoft recently came out with an MSIX-related packaging format called the MSIX Bundle, which includes safer and more reliable deployments as well as auto-updates and improved widespread support - which makes our life easier as application packagers.
Although we consider that there's still room for improvement, MSIX has developed a lot since its release in 2018. As detailed in the Microsoft MSIX feature support page, we can see that it has many new features supported by different versions of Windows.
If you want to learn more about MSIX, check our MSIX-related article list, to find many resources where we explore how it works and go through some of the possible use cases.
Now, let's go through what the MSIX Bundle is, what it has to offer and how it can be of help in application packaging.
What is the MSIX Bundle?
The MSIX Bundle is a packaging format that comprises multiple MSIX packages - each of which can support a specific system architecture.
In practice, with the MSIX Bundle, you can have both an MSIX package for the x86 version of your installer and another one for the x64 version, which you can include into one single package as a bundle.
So, what’s the main benefit of using an MSIX Bundle?
Having an MSIX Bundle for your application, instead of a separate MSIX package for each architecture brings a great benefit: a more scalable distribution of the application.
The MSIX bundle lets the App Installer know how to handle the installation, installing only the resources that are specific to the target device’s architecture. By bundling multiple MSIX packages together, you will only have to upload that MSIX Bundle to your distribution location. And then let the App Installer take care of the rest.
Make sure to use Windows 10 1809 or higher if you want to take advantage of the MSIX Bundle packaging format. You can find more details on MSIX supported platforms here.
How to open an MSIX Bundle?
Similar to MSIX packages, the MSIX bundle uses a PKZip-based file compression which can be decompressed using any PKZip utility tool.
If you decompress an MSIX Bundle package, you will notice that the file resources have been replaced by the MSIX packages that are bundled into the MSIX Bundle package.
Also, you will see that instead of the AppxManifest.xml file that contains all the information the system needs (in order to deploy, display and update the MSIX package), you will see the AppxBundleManifest.xml.
Here's how the opened manifest file looks for an MSIX Bundle package:
As you can see above, the manifest file includes only two elements:
- “Identity”- which contains the details regarding the identity of the MSIX Bundle such as: Name, Publisher, Version
- “Packages”- which contains the details about the MSIX packages that are bundled in
How to Create an MSIX Bundle?
Let’s suppose that you have two MSIX packages, one x86 and one x64 version of an application, with: one xml file common in both x64 and x86 architectures and for each package, one xml file that addresses the specific architecture.
Each version reads the content of the two corresponding configuration xml files and displays the content on the screen, as seen below.
If you want to create an MSIX Bundle to include the two MSIX packages, all you need is the MakeAppx tool. You can find this tool in any Windows 10 SDK version, starting with 1809.
Basically, all you need to do is to copy the two MSIX packages into the same folder and then run the following command line:
C:\> "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\MakeAppx.exe" bundle /d <input_directory_path> /p <file_path>.msixbundle
The bundled MSIX packages must have the same AppID, Publisher, and Version. The only component that can be different is the Package Process Architecture. If they don’t meet these requirements, you will encounter the following error whilst attempting to bundle them using the MakeAppx.exe tool:
Do not forget to sign it. Same as for all MSIX packages, signing is mandatory for MSIX Bundle packages.
Once the MSIX Bundle is signed, you are ready to distribute it to wherever is needed without worrying about the process architecture of the target devices.
To test it, take the MSIX Bundle package you just created and install it on a device.
As you will see, the App Installer GUI is the same as for a standard MSIX package.
Once installed, if you break into the MSIX container, you will see that only the resources that are specific to the target device’s architecture are installed.
To break into the MSIX container, I recommend Hover, a free tool from Advanced Installer.
What if you don't have the MSIX packages ready for bundling?
Having different architectures of the same application both in production is not a common use case for an enterprise. But, if you still need to create an MSIX Bundle, a more practical solution would be to use a full packaging tool, such as Advanced Installer.
To achieve that, in addition to following the standard steps in Advanced Installer for creating an MSIX package, all you will need to do is:
1. Go to the “Builds” page and select your MSIX Build. From there, tick the “Create a bundle with individual packages inside” box and select the architectures you need.
2. Configure the Source Path and Per Build for each of the file resources that are required only for a specific system architecture.
And that's it! Your MSIX Bundle is now ready to be distributed wherever you want.
Even though the need for multiple architectures of the same application is not that common within the Enterprise environment, the MSIX Bundle could still be something to consider depending on the organization's needs.
For example, some organizations still use the x86 version of Windows and they may need to work with an MSIX Bundle for a more efficient distribution.
You can also use Configuration Manager to deploy your applications, and achieve the same result with the classic approach: having separate MSIX packages for each architecture.
Consider that you will need to have the following:
- each of the MSIX packages imported as a separate “application” in the Configuration Manager
- each of the MSIX packages imported as a single “application” in the Configuration Manager, but added to different “deployment types”
Those two “deployment types” must have a condition set in order to prevent them from getting installed if the MSIX architecture does not match the OS architecture.
Have you used the MSIX Bundle yet? Let us know your experience in the comments below.