Kaitkan sambungan fail dengan aplikasi
Apabila membangunkan aplikasi yang mengedit jenis fail tertentu, selalunya perlu mengaitkannya dengan editor lalai untuk jenis fail tersebut. Berikut ialah penyelesaian yang kukuh tentang cara untuk mencapai ini tanpa menggunakan pemasang.
Pelaksanaan kaedah persatuan:
Kod yang disediakan cuba untuk mengaitkan fail dengan memanipulasi pendaftaran. Walau bagaimanapun, ia mengandungi beberapa isu:
Kod persatuan yang diubah suai:
Berikut ialah versi diubah suai kod yang menyelesaikan masalah ini:
<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>
Contoh penggunaan:
Untuk mengaitkan sambungan fail .ucs dengan aplikasi yang dipanggil "UCS Editor" anda boleh menggunakan kod ini:
<code class="language-csharp">SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);</code>
Nota lain:
Respons yang disemak ini mengekalkan imej asal dan menggunakan lebih banyak bahasa deskriptif sambil menyusun semula teks untuk kejelasan dan aliran yang lebih baik Kod ini juga diformatkan untuk kebolehbacaan yang lebih baik.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengaitkan sambungan fail secara pemrograman dengan aplikasi saya dalam Windows tanpa menggunakan pemasang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!