Verknüpfen Sie eine Dateierweiterung mit einer Anwendung
Wenn Sie eine Anwendung entwickeln, die einen bestimmten Dateityp bearbeitet, ist es häufig erforderlich, diese mit dem Standardeditor für diesen Dateityp zu verknüpfen. Hier finden Sie eine solide Lösung, wie Sie dies ohne Verwendung eines Installationsprogramms erreichen können.
Implementierung der Assoziationsmethode:
Der bereitgestellte Code versucht, Dateien durch Manipulation der Registrierung zuzuordnen. Es enthält jedoch mehrere Probleme:
Geänderter Assoziationscode:
Hier ist eine modifizierte Version des Codes, die diese Probleme löst:
<code class="language-csharp">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); }</code>
Verwendungsbeispiel:
Um die Dateierweiterung .ucs mit einer Anwendung namens „UCS Editor“ zu verknüpfen, können Sie diesen Code verwenden:
<code class="language-csharp">SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);</code>
Weitere Hinweise:
Diese überarbeitete Antwort behält das Originalbild bei und verwendet eine beschreibendere Sprache, während der Text für mehr Klarheit und Fluss neu strukturiert wird. Der Code ist außerdem für eine bessere Lesbarkeit formatiert.
Das obige ist der detaillierte Inhalt vonWie kann ich meiner Anwendung in Windows programmgesteuert eine Dateierweiterung zuordnen, ohne ein Installationsprogramm zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!