Forum

Пожалуйста or Регистрация для создания сообщений и тем.

Проблема с реестром

Всем привет,
Я с помощью c# хочу изменить некоторые параметры и создать раздел в реестре, но и то и то не получается

if (checkBoxPanelTransparent.Checked)
{
using (RegistryKey key = Registry.LocalMachine
.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced")) // Сделать панель задач более прозрачной
{
key.SetValue("UseOLEDTaskbarTransparency", 1, RegistryValueKind.DWord);
// Если такого параметра нет, то мы его создаём
}
}
else
{
try
{
using (RegistryKey key = Registry.LocalMachine
.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced"))
{
key.DeleteValue("UseOLEDTaskbarTransparency");
// Удаляем параметр
}
}
catch { }
}

Не создаётся параметр (выше)

if (checkBoxArrow.Checked)
{
using (RegistryKey key = Registry.LocalMachine
.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons")) // Убрать "стрелочки" у ярлыков
{
key.SetValue("29", "%Windir%\\System32\\Shell32.dll,-50");
// Если такого параметра нет, то мы его создаём
}
}
else
{
try
{
Registry.CurrentUser.DeleteSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons");
// Удаляем подраздел
}
catch { }
}

Не создаётся раздел Shell Icons

Привет 🖐
Для начала СкопированоCreateSubKey нужно заменить на СкопированоOpenSubKey, т.к. постоянно создавать раздел, который уже есть не нужно.
При этом, если далее у нас идёт Скопированоkey.SetValue и Скопированоkey.DeleteValue, тогда нужно добавить true сюда:
Скопировано...OpenSubKey("путь", true))

И если что-то идёт не так, пожалуйста, конкретно и точно в чём ошибка и что происходит.

Удаленный пользователь, Удаленный пользователь и Удаленный пользователь отреагировали на эту запись.
Удаленный пользовательУдаленный пользовательУдаленный пользователь

Спасибо за ответ

Разберём пример с Shell Icons,
насколько я знаю в чистой винде нету СкопированоHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons
этого раздела, мне нужно его создать, но не создаётся.
Вы мне предлагаете заменить на OpenSubKey, но он не может создать раздел, он только читать умеет (без true)

Изначально мне нужно создать раздел, потом уже через OpenSubKey открывать, читать и тд
Но вот проблема почему-то никак раздел Shell Icons не хочет создаваться

Цитата: XpucT от 29.05.2022, 17:02

т.к. постоянно создавать раздел, который уже есть не нужно.

Приветствую.
Обработайте в catch исключение и увидите почему.

Понял почему. "Отказано в доступе"

Цитата: Клякнутый кля от 30.05.2022, 10:19

Понял почему. "Отказано в доступе"

Логично, т.к. СкопированоHKEY_LOCAL_MACHINE доступна для редактирования только с правами администратора...

Это я уже понял

Я пробовал запустить программу через админа, не вышло
Потом пытался получить права через RegistrySecurity, тоже не получилось

РЕШЕНО
Я убрал галочку в свойствах сборки "предпочтительно 32-разрядная версия"

код

if (checkBoxArrow.Checked)
{
using (RegistryKey key = Registry.LocalMachine
.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons")) // Убрать "стрелочки" у ярлыков
{
key.SetValue("29", "%Windir%\\System32\\Shell32.dll,-50");
// Если такого параметра нет, то мы его создаём
}
}
else
{
try
{
Registry.LocalMachine.DeleteSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons");
// Удаляем подраздел
}
catch { }
}

 

код2

if (checkBoxPanelTransparent.Checked)
{
using (RegistryKey key = Registry.LocalMachine
.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", true)) // Сделать панель задач более прозрачной
{
key.SetValue("UseOLEDTaskbarTransparency", 1, RegistryValueKind.DWord);
// Если такого параметра нет, то мы его создаём
}
}
else
{
try
{
using (RegistryKey key = Registry.LocalMachine
.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", true))
{
key.DeleteValue("UseOLEDTaskbarTransparency");
// Удаляем параметр
}
}
catch { }
}