2008-09-08 3 views
0

Я унаследовал старый сериал (сериал, я имею в виду бородавчатый с большим количеством недокументированных исправлений ошибок, чем 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.

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

ответ

0

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

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

1

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

1

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