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