Package family name is important property, that describes each MSIX package installed on Windows 10 / Windows 11. It consists of package name, concatenated with a special string of 13 letters and numbers. There are many places where this value is used, but the most easy one to spot is that it builds the folder path, under which all MSIX files are saved.
For example, the package family name of MSIX Hero is MSIXHero_2.2.56.0_neutral__zxq1da1qqbeze
. You can see the family name by invoking a PowerShell command let Get-AppxPackage <name>
and scrolling to PackageFullName
…
… or by opening the package in MSIX Hero, which also shows the value:
The first part of the family name is just simply a package name. This is something the author defines in the manifest file. More interesting is the second part – it seems to be not written directly into the manifest, for the very package is always the same on all machines and seems to change when the publisher changes. For this reasons, it is sometimes being called a “publisher hash”. It also has an interesting properties:
- It is always a string of exactly 13 letters and/or numbers
- It avoids certain letters (for example “i” and “o” – you will never find them in the family name).
- Changes together with the full publisher name. Changing the display values and other package identification does not have impact on it.
This post will explain how the value can be calculated and how to implement the algorithm in C#. Since the hash algorithm is constant on all machines, you do not have to install the package to know its family name / publisher hash.
- Since there is an unmanaged API which does the conversion, you can use kernel32 method PackageFamilyNameFromId, which can be directly p/invoked from C# or PowerShell. This is the way MSIX Hero up to some version was calculating the hashes.
- Implementing the method knowing how the value is calculated.