„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich eine Dateierweiterung programmgesteuert mit meiner Anwendung in Windows assoziieren, ohne ein Installateur zu verwenden?

Wie kann ich eine Dateierweiterung programmgesteuert mit meiner Anwendung in Windows assoziieren, ohne ein Installateur zu verwenden?

Gepostet am 2025-04-08
Durchsuche:870

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

associate Datei -Erweiterungen mit application

]

Bei der Entwicklung von Anwendungen, die einen bestimmten Dateityp bearbeiten, müssen sie normalerweise als Standardeditor für diesen Dateityp assoziieren. Hier ist eine zuverlässige Lösung, um dies zu erreichen, ohne das Installationsprogramm zu verwenden.

Implementierung der Assoziationsmethode:

Der von

angegebene Code versucht, Dateien durch Manipulation der Registrierung zu verknüpfen. Es enthält jedoch mehrere Fragen:
  1. Es öffnet die Registrierung des aktuellen Benutzers ohne Angabe von Lese- und Schreibberechtigungen, was verhindern kann, dass der Schlüssel erfolgreich geändert wird.
  2. Es verwendet CreateSubkey anstelle von OpenSubkey, um einen Shell -Unterschlüssel zu erstellen, der fehlschlägt, wenn der Unterschlüssel bereits existiert.

geänderter Assoziationscode:

Folgendes ist eine modifizierte Version des Code, die diese Probleme löst:
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);
}

Beispiel der Nutzung:

Um die .ucs -Dateierweiterung mit einer Anwendung mit dem Namen "UCS -Editor" zu verknüpfen, können Sie diesen Code verwenden:
SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);

Andere Vorkehrungen:

  • Stellen Sie sicher, dass ausführbarer Path auf die tatsächliche ausführbare Datei zeigt, nicht auf die ausführbare Abkürzung oder die ausführbare Datei.
  • Wenn die Dateierweiterung in der Registrierung nicht registriert ist, ist es erforderlich, ihren entsprechenden Schlüssel vor der Einrichtung des Verbandes zu erstellen.
  • Verwenden Sie die SEESEASSOCIAInationSet -Methode, um Assoziationen mehrerer Dateitypen automatisch festzulegen.

Diese überarbeitete Antwort behält das Originalbild bei und verwendet eine beschreibende Sprache, während der Text für eine verbesserte Klarheit und Fluss umstrukturiert wird. Der Code ist auch für eine bessere Lesbarkeit formatiert.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3