Проблема доступа к реестру программно - PullRequest
1 голос
/ 17 февраля 2012

У меня проблема с программным чтением значения реестра с использованием C #.Я посмотрел на многих сайтах и ​​помочь, но не смог найти ничего полезного.Я могу получить доступ и читать реестр, когда я запускаю VS в повышенном режиме, но сталкиваюсь с проблемой, когда я запускаю VS без повышенного режима.Первоначально я начал с кода ниже

byte[] val = (byte[])Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\MyServices\\Identity\\ASPNET_SETREG", "ValueName", 0);

Это работало нормально в режиме с повышенными правами, но не в режиме без повышенных.Поместил атрибут поверх функции

[RegistryPermissionAttribute(SecurityAction.Demand,Unrestricted=true)]

Это не помогло.Потом попробовал

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.AllFlags)] 

Все равно не сработало.Теперь я попробовал приведенный ниже код ...

RegistryKey key = Registry.LocalMachine;            


        RegistrySecurity rs = new RegistrySecurity();
        rs = key.GetAccessControl();
        string user = "DomainName\\Username";
        rs.AddAccessRule(new RegistryAccessRule(user,
        RegistryRights.ReadKey,
        InheritanceFlags.None,
        PropagationFlags.None,
        AccessControlType.Allow));


        key.SetAccessControl(rs);//Exception: "Attempted to perform an unauthorized operation."}
        //RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG");
        //RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG", false);
        //RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG", RegistryKeyPermissionCheck.ReadSubTree);
        RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG", RegistryKeyPermissionCheck.ReadSubTree, RegistryRights.ReadPermissions);

Комментируя SetAccessControl и используя любую опцию OpenSubkey, я получаю исключение: «Запрошенный доступ к реестру запрещен».

Я плохозастрял и не может продолжить.Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 28 декабря 2013

Реестр Windows в основном представляет собой структурированную файловую систему и имеет разрешения для ключей и значений.

У вас неправильно установлены разрешения для ...\MyServices\ или более глубоких ключей - у вас нет прав доступа к ним из вашего непривилегированного процесса.

Либо:

  1. Эти ключи должны быть доступны для чтения любому, поэтому вы должны изменить разрешения, чтобы сделать их доступными для чтения всем.Или -
  2. Эти ключи были намеренно ограничены по уважительной причине, и поэтому они не должны быть доступны для чтения всем, и в этом случае ваша программа всегда должна работать с повышенными правами.
1 голос
/ 17 февраля 2012
private RegistryKey keyR = Registry.CurrentUser.OpenSubKey("Software\\YourKey",true);
private RegistryKey keyW = Registry.CurrentUser.CreateSubKey("Software\\YourKey");

public string version
{
    get { return keyR.GetValue("VERSION", "", RegistryValueOptions.DoNotExpandEnvironmentNames).ToString(); }
    set { keyW.SetValue("VERSION", value, RegistryValueKind.String); }
}

Я использую реестр Windows таким образом.Нет проблем ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...