Удалить папку из реестра - проблемы с разрешениями - PullRequest
1 голос
/ 03 января 2012

Я пытаюсь удалить одну папку из реестра.Допустим, я хочу удалить папку

Software\TeamViewer

Я написал код, но он дает исключение «Вы не можете писать».Я предполагаю, что это какая-то проблема с разрешениями и правами доступа.

string keyapath = @"Software\TeamViewer";
RegistryKey regKeyAppRoot = Registry.CurrentUser.OpenSubKey(keyapath);
regKeyAppRoot.DeleteSubKeyTree(keyapath);

Как мне разрешить моему программному обеспечению удалять папки из реестра?

РЕДАКТИРОВАТЬ: У меня есть права администратора моей системы.Мне все еще нужно исключительно назначать права на приложение через мой код?

Ответы [ 3 ]

5 голосов
/ 03 января 2012

Метод OpenSubKey с одним параметром открывает ключ для чтения. Используйте другой вариант метода OpenSubKey:

OpenSubKey(String, Boolean) - Передайте true для второго параметра, чтобы открыть ключ с общим доступом для записи

OpenSubKey(String, RegistryKeyPermissionCheck) - Позволяет некоторый точный контроль над разрешением взлома для подразделов

OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights) - Как и выше, но вы можете точно указать необходимые права.

Подробнее см. В MSDN.

2 голосов
/ 03 января 2012

Вашему приложению необходимы права admin для изменения данных в реестре. Чтобы получить эти права, mainfest вашего приложения должен содержать некоторые значения, которые сообщают Windows, что приложению нужно больше прав.

Google uac .net или uac c# (UAC = Контроль учетных записей)

Или просто взгляните на эту статью.

Создание и вставка манифеста приложения (UAC)

1 голос
/ 03 января 2012

Вы должны создать файл манифеста в вашем проекте (щелкните правой кнопкой мыши по вашему проекту, добавьте новый элемент, файл манифеста). Затем откройте его, внутри вы увидите это:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> // Put this to invoke UAC for admin rights
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

Затем, когда вы запустите ваше приложение, оно попросит вас ввести UAC, тогда программа будет работать от имени администратора, надеюсь, предоставив вам необходимый доступ.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...