将文件扩展名与应用程序关联
在开发编辑特定文件类型的应用程序时,通常需要将其关联为该文件类型的默认编辑器。以下是如何在不使用安装程序的情况下实现此目标的可靠解决方案。
关联方法的实现:
提供的代码尝试通过操作注册表来关联文件。但是,它包含几个问题:
修改后的关联代码:
以下是解决这些问题的代码的修改版本:
<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>
使用方法示例:
要将 .ucs 文件扩展名与名为“UCS Editor”的应用程序关联,您可以使用此代码:
<code class="language-csharp">SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);</code>
其他注意事项:
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.
以上是如何在不使用安装程序的情况下以编程方式将文件扩展名与 Windows 中的应用程序关联?的详细内容。更多信息请关注PHP中文网其他相关文章!