Настройка реестра C # - PullRequest
       7

Настройка реестра C #

0 голосов
/ 18 декабря 2009

Я устанавливаю параметр реестра и могу это сделать, если значение указано в [HKEY_CURRENT_USER], но если значение указано в [HKEY_CURRENT_USER \ Software \ Adobe \ Acrobat Reader \ 9.0 \ ethan], тогда я получаю следующую ошибку:

ex {"Невозможно выполнить запись в раздел реестра."} System.Exception {System.UnauthorizedAccessException}

кто-нибудь знает, что может быть не так? Смотрите код ниже:

private string setRegKey(string machinename)
    {
        try
        {
            RegistryKey regKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.CurrentUser, machinename).OpenSubKey("Software").OpenSubKey("Adobe").OpenSubKey("Acrobat Reader").OpenSubKey("9.0").OpenSubKey("ethan");
            regKey.SetValue("Test", 1);
            regKey.Close();
            return "Success";
        }
        catch (Exception ex)
        {
            return "Error: " + ex.ToString();
        }
    }

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

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

В любом случае следует помнить, что каждый раз, когда вы вызываете OpenSubKey, вы получаете новый экземпляр объекта RegistyKey, и каждый из них должен быть утилизирован. В противном случае вы начнете пропускать дескрипторы реестра из-за ошибки финализации в фреймворке (возможно, это исправлено, но я не отвечаю).

Кроме того, нет необходимости открывать каждый узел ключа отдельно (разве это связано с удаленно открытыми ключами?). Я бы предложил изменить код внутри блока try следующим образом:

using ( RegistryKey remoteUserKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.CurrentUser, machinename) )
using ( RegistryKey remoteKey = remoteUserKey.OpenSubKey(@"Software\Adobe\Acrobat Reader\9.0\ethan") )
{
    remoteKey.SetValue("Test", 1);
    return "Success";
}

Если вам не нужно изменять это удаленно, удалите первые две строки и используйте вместо этого:

using ( RegistryKey key = Registry.LocalUser.OpenSubKey(@"Software\Adobe\Acrobat Reader\9.0\ethan") )
0 голосов
/ 18 декабря 2009

Запуск regedt32.exe из поля запуска откроет версию regedit, которая позволяет просматривать разрешения, установленные для каждого раздела реестра. Вы можете использовать это, чтобы определить, какие разрешения вам нужны для редактирования ключа. Следующим шагом будет обеспечение того, чтобы учетная запись, под которой работает приложение, имела соответствующие разрешения. Если приложение запущено с включенным контролем доступа пользователей, может потребоваться запустить его, удерживая нажатой клавишу shift, щелкая правой кнопкой мыши исполняемый файл и выбирая опцию «Запуск от имени администратора». (Это то, что подразумевается под возвышением приложения)

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