Вы должны войти, чтобы создавать сообщения и темы.

Не меняется значение реестра [Решено]

Страница 1 из 2►

Всем доброго времени суток!
есть такой код:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    using (RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{35286a68-3c57-41a1-bbb1-0eae73d76c95}\PropertyBag"))
    {
        key.SetValue("ThisPCPolicy", checkBox1.Checked ? "Hide" : "Show");
    }
}

но код не работает именно в этом разделе реестра.
Подскажите пожалуйста что делать? Что не так?

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    using (RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\OptimalLayout"))
    {
        key.SetValue("EnableAutoLayout", checkBox1.Checked ? 0 : 1);
    }
}

тоже самое

Добрый день.
А права Администратора у программы имеются?
Проверил код из второго сообщения, все работает. Может что-то с правами доступа к ветке реестра делали?

Добрый день.
права Администратор есть через manifest:  <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
а как проверят права к реестру? Я могу ручной менять или удалить ключ, а вот через C# не работает
Можно ли получить полный доступ к реестру и принудительно менять значения?

Самый правильный способ через манифест, а проверить, запущенна ли программа с правами администратора или нет можно так:

using System.Security.Principal;

WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator); // true - есть права, false - нет прав 

Ну есть еще и костыльный способ запроса прав администратора при запуске. Чисто для справки...

Ну а делать проверку прав к реестру наверное самый простой, но вероятно не самый правильный способ банально через обработку исключения.
Например, код из второго сообщения, без прав доступа к реестру при необработанном исключении вывалится в ошибку.

Лайкнул Komoliddin
Komoliddin
Цитата: Adler от 20.11.2020, 20:28

код из второго сообщения, без прав доступа к реестру

а как получить?

Цитата: Komoliddin от 20.11.2020, 20:37

а как получить?

Права получить? Запустить программу с правами администратора. Если реестр не сломан и там стандартные права доступа, то этого достаточно.

Как именно у вас не работает? Если банально нет прав при выполнении кода, то вылетит исключение, если конечно оно не глушится через try-catch. Если ошибки нет, то код должен сработать.

я не трогал права к реестру вроде реестр не сломан. когда галочку нажимаю тупо нет никакой ошибки, я проверял этот код на свежий установленном системе, там тоже самое...

Возможно глупый вопрос, но все же спрошу: когда проверяете в редакторе реестра изменения, обновляете окно? Или как вы мониторите изменения ключей в реестре?

Цитата: Adler от 20.11.2020, 20:54

Возможно глупый вопрос, но все же спрошу: когда проверяете в редакторе реестра изменения, обновляете окно? Или как вы мониторите изменения ключей в реестре?

да конечно, каждый раз нажимаю F5 несколько раз)

1, 2
Код ваш
СТОП. НЕ, не так. Я не заметил, что у вас событие на checkBox1_CheckedChanged, а не на button1_Click
P.S. Тем не менее код и так работает...

я сделал для себя мини твикер, там все настройки через реестр, вот из 100%, 95% работает как положено, а 5% не меняется, права админ есть, UAC выключен через Win10Tweaker, даже не знаю в чем проблема?

Цитата: Adler от 20.11.2020, 21:03

button1_Click

получается у вас если button работает?

Ну я имел в виду, что значение меняется по событию нажатия на кнопку, а не изменению checkBox, но оно и так и так работает...

Страница 1 из 2►