"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मैं एक इंस्टॉलर का उपयोग किए बिना विंडोज में अपने एप्लिकेशन के साथ एक फ़ाइल एक्सटेंशन को प्रोग्रामेटिक रूप से कैसे जोड़ सकता हूं?

मैं एक इंस्टॉलर का उपयोग किए बिना विंडोज में अपने एप्लिकेशन के साथ एक फ़ाइल एक्सटेंशन को प्रोग्रामेटिक रूप से कैसे जोड़ सकता हूं?

2025-04-08 पर पोस्ट किया गया
ब्राउज़ करें:189

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

] ] यहां इंस्टॉलर का उपयोग किए बिना इसे प्राप्त करने के लिए एक विश्वसनीय समाधान है।

एसोसिएशन विधि का कार्यान्वयन:

द्वारा प्रदान किया गया कोड रजिस्ट्री में हेरफेर करके फ़ाइलों को जोड़ने का प्रयास करता है। हालाँकि, इसमें कई प्रश्न हैं:

] ]

    संशोधित एसोसिएशन कोड:
  1. निम्नलिखित कोड का एक संशोधित संस्करण है जो इन समस्याओं को हल करता है:
  2. ] { // पढ़ने और लिखने के साथ वर्तमान उपयोगकर्ता की रजिस्ट्री खोलें उपयोग करना (RegistryKey currentuser = registry.currentuser.opensubkey (@"HKEY_CURRENT_USER", REGISTRYKEYPERMISSIONCHECK.READWRITESUBTREE, System.Security.AccessControl.RegistryRights.fulControl)))) { उपयोग करना (रजिस्ट्री बेसके = currentuser.createsubkey (एक्सटेंशन)) { basekey.setValue ("", keyname); } उपयोग करना (रजिस्ट्री OpenMethodkey = currentuser.createsubkey (keyname)) { OpenMethodkey.setValue ("", फाइल्डेसक्रिप्शन); // यदि "डिफ़ॉल्टिकॉन" सबके मौजूद नहीं है, तो इसे बनाएं if { उपयोग करना (RegistryKey defaulticonkey = openMethodkey.Createsubkey ("डिफ़ॉल्टिकॉन"))) { defaulticonkey.setValue ("", "\" "निष्पादन योग्य" \ ", 0"); } } // शेल सबकी बनाएं और संपादित करें और कमांड सबकी खोलें उपयोग करना (रजिस्ट्रीकी शेलकी = OpenMethodkey.Createsubkey ("शेल")) { उपयोग करना (RegistryKey Editkey = Shellkey.Createsubkey ("संपादित करें")) { उपयोग करना (RegistryKey EditCommandkey = Editkey.Createsubkey ("कमांड"))) { EDITCOMMANDKEY.SETVALUE ("", "\" "निष्पादन योग्य" \ "\"%1 \ ""); } } उपयोग करना (रजिस्ट्रीकी OpenKey = Shellkey.Createsubkey ("ओपन")) { उपयोग करना (RegistryKey OpenCommandkey = OpenKey.Createsubkey ("कमांड"))) { opencommandkey.setValue ("", "\" "निष्पादन योग्य" \ "\"%1 \ ""); } } } } // HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Currentversion \ Explorer \ Fileexts में प्रोगिड सेट करें उपयोग करना (RegistryKey fileextskey = currentUser.Createsubkey (@ { fileextskey.setValue ("progid", keyname); } } // अपने फ़ाइल संघों को ताज़ा करने के लिए परिवर्तनों की खोजकर्ता को सूचित करें Shchangenotify (shcne_assocchanged, shcnf_flush, intptr.zero, intptr.zero); }

उपयोग का उदाहरण:

] ]

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);
}

यदि फ़ाइल एक्सटेंशन रजिस्ट्री में पंजीकृत नहीं है, तो एसोसिएशन की स्थापना से पहले इसकी संबंधित कुंजी बनाना आवश्यक है। ]

यह संशोधित प्रतिक्रिया मूल छवि को बनाए रखती है और बेहतर स्पष्टता और प्रवाह के लिए पाठ का पुनर्गठन करते हुए अधिक वर्णनात्मक भाषा का उपयोग करती है। कोड को बेहतर पठनीयता के लिए भी स्वरूपित किया गया है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3