Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cannot write to the registry key

Tags:

c#

I am getting error cannot write to the registry key when i am trying to save my keys in the registry .

//Here is my code .

Note : I tried to run as an Administartor assuming some permission problems still getting the same error ....

private const string RegistryKeyName = "Skms";
private readonly RegistryKey SoftwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE");

public KeyManagementRegistryKeyChangeImpl(bool writeable)
    {
        this.writable = writeable;
        RegistryKey skms; 
        if (Environment.Is64BitOperatingSystem == true) 
        {
            skms = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(RegistryKeyName,true);

        }
        else
        {
            skms = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
        }

        if (null == skms)
        {
            skms = SoftwareKey.CreateSubKey(RegistryKeyName, RegistryKeyPermissionCheck.ReadWriteSubTree);
        }

        if(skms == null)
        {
            throw new System.ArgumentException(string.Format(CultureInfo.InvariantCulture, 
                @"Registry Key 'HKEY_LOCAL_MACHINE\SOFTWARE\{0}' not found or created",
                RegistryKeyName));
        }

        Decryptor decryptor = Decryptor.Create();
like image 530
62071072SP Avatar asked Aug 26 '11 09:08

62071072SP


2 Answers

Try this:

RegistryKey skms = SoftwareKey.OpenSubKey(RegistryKeyName, true);

The second parameter should be set to true if you need write access to the key.

-EDIT-

On 64-bit system, you can try this (if you are using .Net 4):

private readonly RegistryKey SoftwareKey = 
    RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
    OpenSubKey("SOFTWARE");
like image 66
Edwin de Koning Avatar answered Nov 11 '22 11:11

Edwin de Koning


if (null == skms)            
{             
   skms = Registry.LocalMachine.OpenSubKey("SOFTWARE",true);              
   RegistryKey key = skms.CreateSubKey(
          RegistryKeyName, RegistryKeyPermissionCheck.ReadWriteSubTree);      
}

This is the answer for my question .

like image 18
62071072SP Avatar answered Nov 11 '22 13:11

62071072SP