Legacy File Type Associations

Modern Windows records a user’s default application separately from the older extension-to-ProgID mappings stored below Software\Classes. Both mechanisms still exist, but they serve different purposes and do not have the same priority.

In short: a legacy mapping can register or provide a fallback handler, but it should not be treated as a reliable replacement for the current user’s protected default-app selection.

What is a legacy file association?

In this article, legacy association means the traditional registry mapping from a file extension to a ProgID. A per-user mapping looks like this:

HKEY_CURRENT_USER\Software\Classes\.ext
  (Default) = <ProgID>

The equivalent machine-wide mapping is stored below:

HKEY_LOCAL_MACHINE\Software\Classes\.ext
  (Default) = <ProgID>

The referenced ProgID must describe a valid handler, normally including a shell\open\command. If you need a refresher, see Understanding ProgIDs and Windows File Associations.

How this differs from UserChoice

For a modern per-user default, Windows records the selected ProgID in a UserChoice key. For a file extension such as .pdf, the location is:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice

Protocols use a corresponding location:

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice

When a valid per-user choice exists, it takes precedence over the traditional extension mapping. Changing HKCU\Software\Classes\.ext or the machine-wide mapping does not replace that current user choice.

UserChoice current per-user default selected ProgID

Software\Classes\.ext registration or fallback mapping ProgID

Why legacy mappings still matter

The older mapping remains relevant because not every consumer resolves associations in exactly the same way. It may be used when:

  • No explicit per-user default exists and Windows needs a fallback association.
  • An older or specialized application reads HKCU\Software\Classes or HKEY_CLASSES_ROOT directly.
  • A deployment must support software that expects both the modern user choice and the traditional extension mapping.
  • A custom file type needs a registered ProgID and extension mapping before applications can resolve it correctly.

HKEY_CLASSES_ROOT exposes a merged view of the per-user and machine-wide Software\Classes locations. Software that queries HKCR may therefore see the legacy mapping even though Windows Explorer uses a separate per-user default.

There is no dependable permanent extension list

It is tempting to divide extensions into “protected” and “unprotected” lists. That model is too simplistic for current Windows versions.

Microsoft has changed the default-app platform over time and can change its enforcement again through Windows updates. Behavior can also differ between Windows releases, editions, policies, and the component that queries the association. A list collected from one build should therefore not be treated as a stable Windows contract.

Recommended approach: manage the modern per-user association whenever it must be the effective Windows default. Add the legacy mapping only when a fallback or compatibility path is also required.

Managing legacy mappings with SetUserFTA

SetUserFTA can update the current user’s association and, when requested, maintain the corresponding legacy mapping as part of the same operation.

Set an association with its legacy mapping

SetUserFTA.exe set .ext <ProgID> -legacy

Delete an association and its legacy mapping

SetUserFTA.exe del .ext -legacy

The -legacy option keeps the modern and traditional locations consistent. SetUserFTA intentionally does not provide a separate legacy-only write mode.

List legacy associations

# Show legacy associations
SetUserFTA.exe get legacy

# Show modern and legacy associations
SetUserFTA.exe get -all

Use the combined output when troubleshooting software that appears to resolve a different handler than Windows Explorer.

A practical troubleshooting workflow

  1. Query the effective association and resolved command:
SetUserFTA.exe query .ext
  1. List modern and legacy entries:
SetUserFTA.exe get -all
  1. Confirm that the selected ProgID exists and its shell\open\command points to the expected executable.
  2. If older software requires the traditional mapping, reapply the association with -legacy.
  3. Test both Windows Explorer and the affected application, because they may use different resolution paths.

Summary

  • UserChoice represents the modern per-user default.
  • Software\Classes\.ext is the traditional extension-to-ProgID mapping.
  • A valid user choice takes precedence over the legacy mapping.
  • Legacy mappings remain useful for fallback behavior and compatibility with software that reads them directly.
  • Avoid relying on a fixed list of protected extensions; Windows behavior can change between releases and updates.
  • Use -legacy when both modern and traditional association data must remain aligned.

For full command details, see the SetUserFTA documentation.