AppxManifest.xml aka the Package Manifest

The AppxManifest.xml file is the MSIX package manifest and an MSIX package contains a single manifest file.

MSIX bundles, which can carry multiple MSIX Packages such as one for x86 and one for x64 deployment, contain a manifest package for each MSIX package found inside that bundle.

The manifest holds the information defining the application and its features. This information is used by the system to install or uninstall, as well as to update and control the app’s behavior during its lifetime.

Here is where you will find the definitions used for package installation, including:

  • Applications (programs that have a user-accessible entry point) installed by your package;
  • Services;
  • Package declarations & capabilities (FTAs, Services, executionAlias, COMs, etc.);
  • Dependencies for other MSIX packages (redistributables, or the package that a modification package layers onto, etc.)

This file is usually generated automatically by the tool building the MSIX package, be it Visual Studio, Advanced Installer, or any other packaging tool. Of course, you can create it manually, although it is not recommended. This file ends up in the installation folder of your app and it is read-only.

The contents of the file must follow the schemas imposed by the OS. These schemas may differ between different major Windows 10 updates, therefore it is very important to know what OS versions you’re targeting with your app, otherwise, you might end up using features that are not available for your application.

Important. The list of supported resources is constantly updated by Microsoft, check Advanced Installer Blog - MSIX Support Windows article for the latest version.

Manifest Sample Template

Below, you can find a basic template for a package manifest. Most apps that you will work with will have a larger manifest with more information, but this is the core information you should find. The manifest often contains the:

  • Schema References - references to the various schema parts and updates that will be used.
  • App Identity - this is a unique identifier of your package.
  • Properties - information about the app, such as the name to be included in the Settings -> Apps and other resources.
  • Prerequisites - the criteria the app needs to meet to install properly.
  • Resources - the package/app location and others.
  • Application(s) - including:
    • The entry point(s) - This is what you see in the “StartMenu” after installation.
    • FTAs - Your file type associations.
    • URLs - Your protocol handler associations (not shown in the example).
  • COM - Not shown in the example.
  • Services - Not shown in the example.

Remember. FTAs and other resources that you used to define in the registry when building an MSI must now be defined in the package manifest.

Other entries are optional. Optional entries added by updated schemas, such as the UAP10 extensions, may need a more up to date version of the Operating System to be used. You can find a full list of schema elements and requirements in this Microsoft Documentation.

<?xml version="1.0" encoding="utf-8"?>
   <Package xmlns="
      <Identity Name="MyCompany.MySuite.MyApp" 
                Publisher="CN=MyCompany, O=MyCompany, 
                           L=MyCity, S=MyState,     
         MaxVersionTested="10.0.18335.0" />
    <rescap:Capability Name="runFullTrust" />
    <Resource Language="en-US" />
         Executable="myapp.exe" Id="myapp.exe">
         DisplayName="My App"
 	       Description="A useful description." 
         ForegroundText="dark" BackgroundColor="#FFFFFF" >
      <SplashScreen Image="images\splash.png" />