"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How can I programmatically associate a file extension with my application in Windows without using an installer?

How can I programmatically associate a file extension with my application in Windows without using an installer?

Posted on 2025-04-08
Browse:451

How can I programmatically associate a file extension with my application in Windows without using an installer?

Associate file extensions with application

]

When developing applications that edit a specific file type, it is usually necessary to associate it as the default editor for that file type. Here is a reliable solution to achieve this without using the installer.

Implementation of the association method:

The code provided by

attempts to associate files by manipulating the registry. However, it contains several questions:
  1. It opens the current user's registry without specifying read and write permissions, which may prevent the key from being successfully modified.
  2. It uses CreateSubKey instead of OpenSubKey to create a shell subkey, which fails if the subkey already exists.

Modified association code:

The following is a modified version of the code that solves these problems:
public static void SetAssociation(string extension, string keyName, string fileDescription, string executablePath)
{
    // 以读写权限打开当前用户的注册表
    using (RegistryKey currentUser = Registry.CurrentUser.OpenSubKey(@"HKEY_CURRENT_USER", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl))
    {
        using (RegistryKey baseKey = currentUser.CreateSubKey(extension))
        {
            baseKey.SetValue("", keyName);
        }

        using (RegistryKey openMethodKey = currentUser.CreateSubKey(keyName))
        {
            openMethodKey.SetValue("", fileDescription);

            // 如果“DefaultIcon”子密钥不存在,则创建它
            if (openMethodKey.OpenSubKey("DefaultIcon") == null)
            {
                using (RegistryKey defaultIconKey = openMethodKey.CreateSubKey("DefaultIcon"))
                {
                    defaultIconKey.SetValue("", "\""   executablePath   "\",0");
                }
            }

            // 创建 Shell 子密钥并编辑和打开命令子密钥
            using (RegistryKey shellKey = openMethodKey.CreateSubKey("Shell"))
            {
                using (RegistryKey editKey = shellKey.CreateSubKey("edit"))
                {
                    using (RegistryKey editCommandKey = editKey.CreateSubKey("command"))
                    {
                        editCommandKey.SetValue("", "\""   executablePath   "\" \"%1\"");
                    }
                }

                using (RegistryKey openKey = shellKey.CreateSubKey("open"))
                {
                    using (RegistryKey openCommandKey = openKey.CreateSubKey("command"))
                    {
                        openCommandKey.SetValue("", "\""   executablePath   "\" \"%1\"");
                    }
                }
            }
        }

        // 在 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 中设置 ProgId
        using (RegistryKey fileExtsKey = currentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\"   extension))
        {
            fileExtsKey.SetValue("Progid", keyName);
        }
    }

    // 通知资源管理器更改以刷新其文件关联
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, IntPtr.Zero, IntPtr.Zero);
}

Example of usage:

To associate the .ucs file extension with an application named "UCS Editor", you can use this code:
SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);

Other precautions:

  • Ensure that executablePath points to the actual executable, not the shortcut or bundled executable.
  • If the file extension is not registered in the registry, it is necessary to create its corresponding key before setting up the association.
  • Use the EnsureAssociationsSet method to automatically set associations of multiple file types.

This revised response maintains the original image and uses more descriptive language while restructuring the text for improved clarity and flow. The code is also formatted for better readability.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3