Невозможно установить значения реестра, используя класс RegistryKey в C# .NET

Я использую Visual C# 2010 и у меня возникают проблемы при настройке разделов реестра. Я предположил, что это было связано с тем фактом, что я сначала не запускал его как администратор, но я попытался создать Release, а затем щелкнуть правой кнопкой мыши на exe и выбрать "Запуск от имени администратора" безрезультатно.

Я также попытался использовать класс RegistryPermission, который, казалось, не имел никакого значения.

Вот код:

RegistryKey rkey = Registry.LocalMachine;
// RegistryPermission f = new RegistryPermission(
//    RegistryPermissionAccess.Write | RegistryPermissionAccess.Read,
 //   @"HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product");


/**********************/
/* set registry keys  */
/**********************/
RegistryKey wtaKey = rkey.OpenSubKey(@"SOFTWARE\Company\Product", true);
try
{
    wtaKey.SetValue("key1", 123);
    wtaKey.SetValue("key2", 567);
    wtaKey.SetValue("key3", textbox.Text);
    wtaKey.SetValue("key4", "some string");
}
catch (UnauthorizedAccessException ex)
{
    MessageBox.Show(ex.Message);
    return;
}

Это дает мне сообщение об ошибке из исключения каждый раз, когда я запускаю его, даже с "Запуск от имени администратора". Любые идеи, как я могу обойти это? Это кажется странным, потому что моя стандартная учетная запись пользователя позволяет мне войти в regedit и вручную изменить эти значения без проблем.

1 ответ

Это работает:)

Первый:

Вы должны использовать CreateSubKey, а не OpenSubKey.

Во-вторых:

Это была не административная проблема, с которой вы столкнулись, скорее, вам просто нужно было добавить еще один "\" в конец пути к реестру.

 private void button1_Click(object sender, EventArgs e)
 {
     RegistryKey rkey = Registry.LocalMachine;
     RegistryPermission f = new RegistryPermission(
     RegistryPermissionAccess.Write | RegistryPermissionAccess.Read,
         @"HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product");

     /**********************/
     /* set registry keys  */
     /**********************/
     RegistryKey wtaKey = rkey.CreateSubKey(@"SOFTWARE\Company\Product\");
     try
     {
         wtaKey.SetValue("key1", 123);
         wtaKey.SetValue("key2", 567);
         wtaKey.SetValue("key4", "some string");
     }
     catch (UnauthorizedAccessException ex)
     {
         MessageBox.Show(ex.Message);
         return;
     }
 }
Другие вопросы по тегам