ファイル拡張子をアプリケーションに関連付ける
特定のファイル タイプを編集するアプリケーションを開発する場合、多くの場合、アプリケーションをそのファイル タイプのデフォルトのエディタに関連付ける必要があります。インストーラーを使用せずにこれを実現する方法に関する確実な解決策を次に示します。
関連付けメソッドの実装:
提供されたコードは、レジストリを操作してファイルを関連付けようとします。ただし、これにはいくつかの問題が含まれています:
変更された関連付けコード:
これらの問題を解決するコードの修正バージョンを次に示します。
<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>
その他の注意事項:
この改訂された回答では、元のイメージを維持し、より説明的な言語を使用するとともに、テキストを再構築して明瞭さと流れを改善しています。
以上がインストーラーを使用せずに、Windows でプログラムによってファイル拡張子をアプリケーションに関連付けるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。