Подтвердить что ты не робот

Не удается записать в раздел реестра

Я получаю ошибку, не могу записать в раздел реестра, когда пытаюсь сохранить ключи в реестре.

//Вот мой код.

Примечание. Я попытался запустить как Administartor, предполагая, что некоторые проблемы с разрешением все еще получают ту же ошибку....

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();
4b9b3361

Ответ 1

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

Это ответ на мой вопрос.

Ответ 2

Попробуйте следующее:

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

Второй параметр должен быть установлен в true, если вам нужен доступ на запись к ключу.

-Edit -

В 64-битной системе вы можете попробовать это (если вы используете .Net 4):

private readonly RegistryKey SoftwareKey = 
    RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
    OpenSubKey("SOFTWARE");

Ответ 3

Вероятно, вы ошибаетесь в перенаправлении реестра. Возможно, у вас есть 32-битный процесс в 64-битной системе и запись в HKLM\Software переадресовывается в HKLM\Software\Wow6432Node.

Вам нужно открыть 64-битный ключ напрямую или скомпилировать для AnyCPU.

Ответ 4

попробуйте это... кто-то может найти полезный....

using System.Security;
using System.Security.AccessControl;
using Microsoft.Win32;

string user = Environment.UserDomainName + "\\" + Environment.UserName;

RegistryKey rk = 
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
OpenSubKey("SOFTWARE",true);    

RegistrySecurity rs = new RegistrySecurity();

rs.AddAccessRule(new RegistryAccessRule(user,
            RegistryRights.WriteKey | RegistryRights.ReadKey | RegistryRights.Delete,
            InheritanceFlags.None,
            PropagationFlags.None,
            AccessControlType.Allow));
rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample", 
            RegistryKeyPermissionCheck.Default, rs);