Удаленное подключение к реестру и получение исключений - PullRequest
0 голосов
/ 08 сентября 2008

Я унаследовал седой старый кусок кода (под седой, я имею в виду warty с большим количеством недокументированных исправлений ошибок, чем WTF-y), и есть одна часть, которая доставляет мне немного проблем. Вот как он подключается к удаленному реестру для получения ключа добавления / удаления программ:

try
{
    remoteKey = RegistryKey.OpenRemoteBaseKey(
        RegistryHive.LocalMachine, addr.Value).OpenSubKey(
        "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
    return 1;
}
catch (IOException e)
{
    IOException myexception = e;
    //Console.WriteLine("{0}: {1}: {2}",
    //    e.GetType().Name, e.Message, addr.Value);
    return 2;
}
catch (UnauthorizedAccessException e)
{
    UnauthorizedAccessException myexception = e;
    //Console.WriteLine("{0}: {1}: {2}",
    //    e.GetType().Name, e.Message, addr.Value);
    return 3;
}
catch (System.Security.SecurityException e)
{
    System.Security.SecurityException myexception = e;
    //Console.WriteLine("{0}: {1}: {2}",
    //    e.GetType().Name, e.Message, addr.Value);
    return 4;
}

Теперь у меня две проблемы:

  • Я знаю, почему возникла исключительная ситуация IOException - если это не Windows-машина, она ее выбросит. Разница между UnauthorizedAccessException и SecurityException мне не так понятна. У кого-нибудь есть идеи?

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

Любая помощь с любым из них будет отличной.

Ответы [ 3 ]

1 голос
/ 08 сентября 2008

Согласно MSDN , UnauthorizedAccessException составляет , а не выбрасывается OpenSubKey. Поэтому я думаю, что это не нужно.

1 голос
/ 08 сентября 2008

Возможно, вам придется использовать олицетворение, чтобы изменить учетные данные потока, который вызывает методы удаленного реестра. Смотрите здесь ( linky ) для получения дополнительной информации о MSDN. По сути, ваш поток имеет контекст безопасности, который используется для выполнения управляемых и неуправляемых вызовов.

0 голосов
/ 08 сентября 2008

Указатель Джона на MSDN ответил, для чего предназначено исключение UnauthorizedAccessException - оно появляется только при удаленном доступе к ключу с использованием OpenRemoteBaseKey.

Мы немного настороженно относимся к изменению контекста безопасности на компьютере - я нашел ссылку здесь об использовании WMI (которую мы уже используем для подавляющего большинства тяжелой работы) чтобы получить доступ к реестру, так что я мог бы попробовать это вместо этого.

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