Невозможно установить значения реестра, используя класс 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;
}
}