Проблема с реестром
Цитата: Удаленный пользователь от 29.05.2022, 16:11Всем привет,
Я с помощью 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
Всем привет,
Я с помощью 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
Цитата: admin от 29.05.2022, 17:02Привет 🖐
Для началаCreateSubKeyнужно заменить наOpenSubKey, т.к. постоянно создавать раздел, который уже есть не нужно.
При этом, если далее у нас идётkey.SetValueиkey.DeleteValue, тогда нужно добавить true сюда:
...OpenSubKey("путь", true))
И если что-то идёт не так, пожалуйста, конкретно и точно в чём ошибка и что происходит.
Привет 🖐
Для начала СкопированоCreateSubKey нужно заменить на СкопированоOpenSubKey, т.к. постоянно создавать раздел, который уже есть не нужно.
При этом, если далее у нас идёт Скопированоkey.SetValue и Скопированоkey.DeleteValue, тогда нужно добавить true сюда:
Скопировано...OpenSubKey("путь", true))
И если что-то идёт не так, пожалуйста, конкретно и точно в чём ошибка и что происходит.
Цитата: Удаленный пользователь от 29.05.2022, 17:27Спасибо за ответ
Разберём пример с Shell Icons,
насколько я знаю в чистой винде нетуHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons
этого раздела, мне нужно его создать, но не создаётся.
Вы мне предлагаете заменить на OpenSubKey, но он не может создать раздел, он только читать умеет (без true)Изначально мне нужно создать раздел, потом уже через OpenSubKey открывать, читать и тд
Но вот проблема почему-то никак раздел Shell Icons не хочет создаватьсяЦитата: XpucT от 29.05.2022, 17:02т.к. постоянно создавать раздел, который уже есть не нужно.
Спасибо за ответ
Разберём пример с Shell Icons,
насколько я знаю в чистой винде нету СкопированоHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons
этого раздела, мне нужно его создать, но не создаётся.
Вы мне предлагаете заменить на OpenSubKey, но он не может создать раздел, он только читать умеет (без true)
Изначально мне нужно создать раздел, потом уже через OpenSubKey открывать, читать и тд
Но вот проблема почему-то никак раздел Shell Icons не хочет создаваться
Цитата: XpucT от 29.05.2022, 17:02т.к. постоянно создавать раздел, который уже есть не нужно.
Цитата: Удаленный пользователь от 29.05.2022, 19:36Приветствую.
Обработайте в catch исключение и увидите почему.
Приветствую.
Обработайте в catch исключение и увидите почему.
Цитата: Удаленный пользователь от 30.05.2022, 10:19Понял почему. "Отказано в доступе"
Понял почему. "Отказано в доступе"
Цитата: Удаленный пользователь от 30.05.2022, 11:43Цитата: Клякнутый кля от 30.05.2022, 10:19Понял почему. "Отказано в доступе"
Логично, т.к.
HKEY_LOCAL_MACHINEдоступна для редактирования только с правами администратора...
Цитата: Клякнутый кля от 30.05.2022, 10:19Понял почему. "Отказано в доступе"
Логично, т.к. СкопированоHKEY_LOCAL_MACHINE доступна для редактирования только с правами администратора...
Цитата: Удаленный пользователь от 30.05.2022, 11:47Это я уже понял
Я пробовал запустить программу через админа, не вышло
Потом пытался получить права через RegistrySecurity, тоже не получилось
Это я уже понял
Я пробовал запустить программу через админа, не вышло
Потом пытался получить права через RegistrySecurity, тоже не получилось
Цитата: Удаленный пользователь от 30.05.2022, 13:10РЕШЕНО
Я убрал галочку в свойствах сборки "предпочтительно 32-разрядная версия"[spoiler title="код"]
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 { } }
[/spoiler]
[spoiler title="код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 { } }
[/spoiler]
РЕШЕНО
Я убрал галочку в свойствах сборки "предпочтительно 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 { }
}
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 { }
}