विंडोज रजिस्ट्री में मेरे पास उपकुंजी \HKEY_CURRENT_USER\HTMPTK है, जिसके दो मान हैं: Secret Token और Token। मैं दो मानों को हटाना चाहता हूं।

मैंने key.DeleteValue("Secret Token") का उपयोग करने का प्रयास किया (key एक RegistryKey चर है), लेकिन मुझे एक UnauthorizedAccessException मिला, जिसमें संदेश रजिस्ट्री कुंजी पर नहीं लिखा जा सकता.

MSDN और Google के इर्द-गिर्द छेड़छाड़ करते हुए, प्रोग्राम को उसकी ज़रूरत की पहुँच की अनुमति देने के लिए, मुझे मार्गदर्शन के रूप में कुछ उदाहरणों के साथ RegistryPermission वर्ग मिला। इस प्रकार, मैंने निम्नलिखित कोड लिखा:

private bool DeleteTokensFromRegistryEngine()
        {
            RegistryPermission perm = new RegistryPermission(PermissionState.Unrestricted);
            perm.AddPathList(RegistryPermissionAccess.AllAccess, "HKEY_CURRENT_USER\\HTMPTK");
            RegistryKey key = Registry.CurrentUser.OpenSubKey("HTMPTK");
            try
            {
                if (key != null)
                {
                    key.DeleteValue("Secret Token"); //the same error message here
                    key.DeleteValue("Token");
                }
            }
            catch (UnauthorizedAccessException U)
            {
                MessageBox.Show(U.Message);
                return false;
            }
            finally
            {
                key.Close();
            }
            return true;
        }

समस्या गायब नहीं हुई।

मैं क्या गलत कर रहा हूं? इस समस्या का समाधान किस प्रकार से किया जा सकता है?

बाद में संपादित करें:

  1. मैंने यह देखने के लिए दोबारा जांच की कि क्या मैं प्रोग्राम को व्यवस्थापक के रूप में चलाता हूं। मैं करता हूँ;
  2. विंडोज डिफेंडर द्वारा संकेतित कुछ भी संदिग्ध नहीं;
  3. अगर यह मदद करता है, तो मैं रजिस्ट्री संपादक से मान हटा सकता हूं;
0
Bogdan Doicin 31 मई 2019, 12:09

1 उत्तर

सबसे बढ़िया उत्तर

इसका कारण यह था कि मैं गलत OpenSubKey ctor का उपयोग कर रहा था। सही था:

OpenSubKey(String, RegistryRights)

मेरे मामले में, उपकुंजी को इसके साथ खोला जाना चाहिए था:

RegistryKey key = Registry.CurrentUser.OpenSubKey("HTMPTK",RegistryKeyPermissionCheck.ReadWriteSubtree);

हालांकि, एक बेहतर तरीका है: क्योंकि मैं दोनों मानों को हटाना चाहता हूं, यदि संपूर्ण उपकुंजी को हटाना आसान है। मैंने इस विधि को लागू किया, और परिणामी कोड था:

        try
        {
            Registry.CurrentUser.DeleteSubKeyTree("HTMPTK", true);                
        }
        catch (UnauthorizedAccessException U)
        {
            MessageBox.Show(U.Message);
            return false;
        }
0
Bogdan Doicin 2 जून 2019, 11:26