Inside MSIX

Demystifying MSIX Architecture, Development, Deployment and Troubleshooting

Latest posts

Aug 25, 2026
Post comments count 0
Post likes count 2

What Kind of Packaged Process Is It?

Howard Kapustein

As previously discussed, we can divide processes into the two broad categories of packaged vs unpackaged, based on if the process HAS or LACKS package identity. Packaged processes can be divided into three broad categories: All three have package identity, but they make different tradeoffs between compatibility and modern packaged behavior. RuntimeBehavior Packages specify how an application process is created and runs via multiple properties in . The RuntimeBehavior attribute clearly expresses this: is a Universal app. It was first introduced in Windows 81. New lingo appeared with it, initially ref...

Aug 18, 2026
Post comments count 0
Post likes count 2

What’s a PFN?

Howard Kapustein

What's a PFN? MSIX introduced Package identity in Windows 8. While the familiar package identity "5-tuple" was functional, it wasn't especially convenient to pass through APIs or embed in resources such as files, registry keys, URLs, or XML documents. To address this, Windows defined an opaque string representation known as a Package Moniker. Windows called a related identifier derived from a package's Name and Publisher the Package Family Moniker. These were commonly abbreviated as PM and PFM. As development progressed, Windows quite sensibly required new APIs to pass through API Design Review. The review tea...

Aug 11, 2026
Post comments count 2
Post likes count 2

Remove and Package Lifetime

Howard Kapustein

MSIX uses a Garbage Collection (GC) design for staged package lifetime and destaging. Throughout this article: Package Core Principles A staged package can't be destaged while any references to it exist. This is a direct consequence of MSIX's core architectural principles: Consequently, removing a package's payload from disk is not a direct result of a single API call. Instead, package payloads are automatically destaged when they are no longer needed. Even then, destaging may not occur immediately. Some actions that remove a reference don't directly trigger Deployment activity. In these cases,...

Aug 4, 2026
Post comments count 4
Post likes count 3

Remove Is Not Uninstall

Howard Kapustein

Just as There is no Install – it’s ‘Stage’ and ‘Register’ explained that Install is not truly an installation operation in MSIX, Remove is similarly not an uninstall operation. This can be surprising - sometimes even alarming - to developers coming from traditional installer technologies such as MSI, where uninstalling software typically implies: In MSIX, that model simply does not exist. Remove = Deregister + (Maybe) Destage From MSIX Deployment's perspective, a package lifecycle consists of four fundamental operations: There's a symmetry here. Stage and Register do the work necessary to make ...

Jul 28, 2026
Post comments count 0
Post likes count 3

Package Integrity and Enforcement

Howard Kapustein

A recent conversation started (as many interesting conversations do) with a simple question: "Why is MSIX secure?" MSIX includes multiple layers of protection designed to defend against both accidental damage and malicious tampering. But as with all good security solutions, it's not the individual elements so much as their interlocking design that makes the whole stronger than the sum of its parts. MSIX was designed around several core facets, integrated in sometimes novel ways. A packaged process can be trusted to a higher degree than most applications because Windows maintains a verifiable chain of trust fr...

Jul 21, 2026
Post comments count 6
Post likes count 1

Display Name is for Humans

Howard Kapustein

Package identity exists for one primary purpose: This is a considerable improvement over the historical tendency to assign UUIDs and GUIDs to nearly everything - including things that humans were expected to discuss in meetings. Identity Is for Systems A package's Name, Package Full Name, and other identity-derived values are intended for developer and system use. These identifiers prioritize correctness, uniqueness, and programmatic consumption - not clarity or friendliness from an end-user's perspective. Identity must remain stable across servicing operations and dependency resolution. If it changes, the...

Jul 14, 2026
Post comments count 0
Post likes count 1

Package Status

Howard Kapustein

Every package has a set of status flags describing its current health and availability. These can be queried via the Package.Status property. A package may report more than one status value at a time if multiple conditions apply. Package Status Groups The various states fall into three groups: NeedsRemediation Status values in the NeedsRemediation group indicate that the package is in a bad or broken state and must be repaired before it can be used. NotAvailable Status values in the NotAvailable group indicate that Windows has the package installed, but it cannot be used at this time. ...

Jul 7, 2026
Post comments count 0
Post likes count 0

Applications Are Not Packages

Howard Kapustein

Applications are not packages. Let me repeat. Applications are not packages. This is a common misconception due to the (too) often blurring of concepts and terminology. Packages and applications are different and distinct things, so it's important to understand what those words mean (to MSIX). Packages and Applications Are Different Things An application is distributed via a package. That's not the same as being the package. A package is a unit of distribution and deployment. You can install a package, or update a package, or remove a package. You can't install half a package, or remove part of a package. A...

Jun 30, 2026
Post comments count 4
Post likes count 3

MSIX Per-User vs All Users: Install, Provision, and Uninstall Packages

Howard Kapustein

MSIX supports making a package available to all users; the formal term is provisioning. Provisioning a package family makes it available to all users, whereas registration makes a package available to a single user. Per-User vs All Users Traditional installers often provide a "per-machine" installation mode to make software available to all users. In MSIX, the equivalent user experience is achieved through provisioning. To install a package for all users, first stage the package on the machine and then register it for each user. To facilitate this, Deployment manages a 'list of provisioned package families' an...