"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je associer par programme une extension de fichier avec mon application sous Windows sans utiliser un installateur?

Comment puis-je associer par programme une extension de fichier avec mon application sous Windows sans utiliser un installateur?

Publié le 2025-04-08
Parcourir:982

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

Associer les extensions de fichiers à l'application

]

Lors du développement d'applications qui modifient un type de fichier spécifique, il est généralement nécessaire de l'associer en tant qu'éditeur par défaut pour ce type de fichier. Voici une solution fiable pour y parvenir sans utiliser le programme d'installation.

Implémentation de la méthode d'association:

Le code fourni par

tente d'associer des fichiers en manipulant le registre. Cependant, il contient plusieurs questions:
  1. Il ouvre le registre de l'utilisateur actuel sans spécifier les autorisations de lecture et d'écriture, ce qui peut empêcher la modification de la clé.
  2. Il utilise CREETESUBKEY au lieu d'OpenSubKey pour créer une sous-clé Shell, qui échoue si la sous-clé existe déjà.

code d'association modifié:

Ce qui suit est une version modifiée du code qui résout ces problèmes:
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);
}

Exemple d'utilisation:

Pour associer l'extension de fichier .ucs à une application nommée "UCS Editor", vous pouvez utiliser ce code:
SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);

Autres précautions:

  • Assurez-vous que ExécutablePath pointe vers l'exécutable réel, pas l'exécutable de raccourci ou groupé.
  • Si l'extension de fichier n'est pas enregistrée dans le registre, il est nécessaire de créer sa clé correspondante avant de configurer l'association.
  • Utilisez la méthode AssureAsociationSset pour définir automatiquement les associations de plusieurs types de fichiers.

Cette réponse révisée maintient l'image d'origine et utilise un langage plus descriptif tout en restructurant le texte pour une clarté et un flux améliorés. Le code est également formaté pour une meilleure lisibilité.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3