Overview
In Windows, ProgIDs (Programmatic Identifiers) are unique labels that Windows uses to identify programs that can open specific types of files. ProgIDs don’t directly assign file types to applications but serve as the “identifier” that allows you to specify which program to use when setting file type associations.
Let’s go over how ProgIDs work, where they are stored, and how they relate to file associations in Windows.
1. What is a ProgID?
A ProgID is a name assigned to a program that can open particular types of files. For example, a text editor might have a ProgID like MyTextEditor.Document, which helps Windows identify it as an application that can handle .txt files. A ProgID includes an executable path, enabling Windows to identify which application should be used to open files associated with it. A ProgID alone does not tell Windows how to open a .txt file, but it contains the information about the program and command used to open it. The user can associate a file type (e.g., .txt) with a ProgID, which specifies the open command to launch the corresponding application.
An example ProgID would look like this:
HKEY_CLASSES_ROOT\MyAppProgID
shell
open
command = "C:\Path\to\MyApp.exe" "%1"
Simplified: MyAppProgID points to the path of MyApp.exe, specifying the command Windows should use to open associated files.
2. Where are ProgIDs stored?
ProgIDs are stored in the Registry, where there are different locations for system-wide ProgIDs (for all users) and user-specific ProgIDs (for only the current user):
- System-Wide ProgIDs (Machine Level):
HKEY_LOCAL_MACHINE\Software\Classes\<ProgID>
When a ProgID is registered in HKLM, it is available for all users on the machine.
- User-Specific ProgIDs (Current User Level):
HKEY_CURRENT_USER\Software\Classes\<ProgID>
When a ProgID is registered in HKCU, it only affects the current user, allowing for personalized settings without impacting other accounts on the computer.
IMPORTANT: If both a system-wide and a user-specific ProgID exist, Windows prioritizes the user-specific setting for that user.
3. Ok, but what is HKEY_CLASSES_ROOT then?
HKCR combines the two locations:
- It is a virtual hive that merges:
- HKEY_CURRENT_USER\Software\Classes (per-user settings).
- HKEY_LOCAL_MACHINE\Software\Classes (machine-wide settings).
Most applications query HKEY_CLASSES_ROOT directly for simplicity, as it resolves the effective settings by merging the two locations.
4. How ProgIDs relate to file associations
ProgIDs provide information to Windows about how a program opens a file but don’t automatically associate file types with that program. Instead, file type associations define the actual link between a file extension or protocol (like .txt and https:// or mailto://) and a ProgID.
On older versions of Windows, it was possible to use the assoc and ftype commands to create file associations at the machine level (affecting all users).
However, in Windows 10 and 11, certain file types have their associations enforced at the user level, meaning that system-wide (machine-level) settings cannot override user preferences for these file types.
While Microsoft has not published an official list of these enforced file types, common examples include:
- .htm and .html: Typically associated with web browsers.
- .pdf: Associated with PDF readers.
- .jpg and .png: Associated with image viewers.
- .mp3 and .mp4: Associated with media players.
- http and https: these protocols define the default browser.
For these file types, attempts to set default associations at the machine level will be overridden by user-level settings.
5. Managing ProgIDs with ProgIDTool
ProgIDTool is a handy utility for viewing, creating, and modifying ProgIDs without diving directly into the registry.
Summary
- ProgIDs are unique identifiers for programs, stored in the registry either at a system-wide level (all users) or user-specific level (current user only). They contain the path to the executable that should be launched when a file extension or protocol is associated with it.
- File associations link file types and protocols to ProgIDs. While these associations can be configured at both the machine and user levels, Windows 10 and 11 enforce certain associations, such as the default browser, exclusively at the user level. These settings are protected by the UserChoice key and cannot be modified manually. SetUserFTA can set these associations without going through the settings app.
- ProgIDTool allows you to manage ProgIDs easily without directly editing the registry.
IMPORTANT: To use SetUserFTA successfully, you must first identify the ProgID your application uses or create one yourself using a tool like ProgIDTool. Once you have the ProgID, you can associate a file type (extension) or a protocol (e.g., https, mailto) with the ProgID accordingly.