2012-02-17 2 views
1

У меня есть проблема с чтением значения реестра программно с использованием 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, я получаю исключение: «доступ к запрошенному реестра не допускается.»

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

+0

Попробуйте перейти к разделу реестра, используя 'regedit'; щелкните правой кнопкой мыши по ключу и выберите опцию _Permissions_. – LiquidPony

+0

Вспомнил, я пытался сделать это раньше! – Murthy

+0

Странно, я вижу, что владелец Creater не имеет полного контроля или разрешения на чтение, но система, администратор и пользователи имеют полный контроль и разрешения на чтение. У владельца создателя есть только специальные разрешения. Поэтому нажал на расширенный ... На вкладке «Разрешения» я вижу владельца Creator, разрешение распространяется только на дочерние элементы, но для других это разрешение применяется к этому ключу и подразделам! это меня удивляет! – Murthy

ответ

1
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 таким образом. Нет проблем ...

+0

В тот момент, когда он попадает, OpenSubkey, я получаю исключение! – Murthy

+0

попробуйте этот путь 'Registry.CurrentUser.OpenSubKey («Программное обеспечение \\ YourKey», true); ' – Alex

+0

Вы, ребята, немного настроены - проблема заключается не в доступе к реестру вообще - оба ваших метода работают очень хорошо - проблема в том, что реестр просто файловая система и, как и любая другая файловая система, ограничивает доступ к определенным частям. – antiduh

1

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

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

Либо:

  1. Эти ключи должны быть доступны для чтения любому, так что вы должны изменить права доступа, чтобы сделать их читаемыми всеми. Или -
  2. Эти ключи были намеренно ограничены по уважительной причине, поэтому их не следует читать всем, и в этом случае ваша программа всегда должна быть поднята.
Смежные вопросы