Невозможно установить значения реестра, используя класс RegistryKey в C # .NET - PullRequest
0 голосов
/ 08 сентября 2011

Я использую Visual C # 2010 и у меня проблемы с настройкой разделов реестра.Я предположил, что это было связано с тем фактом, что я сначала не запускал его как администратор, но я попытался создать Release, а затем щелкнуть правой кнопкой мыши исполняемый файл и выбрать «Запуск от имени администратора», но безрезультатно.Я также попытался использовать класс 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 Ответ

1 голос
/ 08 сентября 2011

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

Во-первых:

Вы должны использовать 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;
     }
 }
...