Menu Close

Viewing virtual registry keys from an MSIX app

Desktop apps are fully supported by MSIX. One of the features which were not relevant for APPX/UWP apps but are really important for legacy desktop apps is the support for deployable, virtualized registry keys. Typically, an application installed outside of MSIX would simply install a few registry entries to the HKLM or HKCU nodes, and expect them to be available during the runtime.

With some exception and peculiarities (read more in this feature proposal), MSIX supports deploying virtual registry keys. Internally, a package that needs the registry would be packaged with a special file called Registry.dat, which is dynamically merged with non-virtualized part as the app starts. This is how it can look:

Troubleshooting of the registry merging may require that the user checks upfront what the app “wants to” deploy, and what it actually “can see”.

This article shows two ways how MSIX Hero can help. The selection of the right method relies on the results you want to achieve:

  • To see only the changes that the app tries to add, go for the Loading registry hive
  • To verify what the app truly sees, go for the running Regedit in package context.

Loading registry hive

This simply mounts the registry file and let you see the virtualized content using regedit. For apps that have a registry, there are two buttons visible in the Developer ribbon tab:

Depending on whether the registry node is already loaded, one of these is enabled and the other disabled.

To see which registry entries are there, press Load registry. You will have to accept UAC dialog, because loading a registry requires elevated rights.

Once the registry is loaded, regedit will be started automatically:

MSIX Hero mounts the registry file directly under HKEY_LOCAL_MACHINE and uses MSIX-Hero- as a prefix, followed by the package name. You can now have a look inside and see all registry keys and values that the package tries to virtualize:

The path may be slightly different from what you would normally see for non-virtualized keys, but this is OK for now, as this merely represents the layout of registry keys in a DAT file.

Once ready, close regedit and back in MSIX Hero, press Unload registry to unmount the registry file (you can do the same from the File menu in the regedit window).

Running Regedit in the package context

This method enables you to see the registry as the application sees it at runtime. If there are any non-virtualized resources, they will be also visible here. To get started, select the application to troubleshoot, and in the Developer tab press Registry editor. This will again start regedit. Note: the executable will be started in the same context as the current package, meaning it will be able to see the resources that are exposed to the packaged app itself, like registry and VFS files.

Since Regedit requires elevated rights, you will be asked to accept UAC dialog (unless you have already elevated MSIX Hero before). After that, navigate to the registry key of your interest:

Pay attention to the path. It is the actual registry path, and not the mounted path as in the first method. Once ready, close regedit.

Summary

MSIX Hero provides two methods to understand the virtualized registry keys. By mounting you can essentially see the raw content of a registry file, which includes everything that package contains. On the other hand, running regedit in the package context shows you the actually virtualized registry, which combines the virtual and non-virtual entries. This is really useful in order to understand what the package actually sees.