У меня есть такой код
</p>
<pre><code>try
{
RegistryKey regKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\xxxx\\yyyyy");
// more code
}
catch
{
}
Мне не нравится использование пустого блока catch. Но это полезно, потому что если у пользователя нет прав доступа к реестру, ничего не следует делать.
Этот фрагмент кода вызывается много раз, и, помимо плохой практики, я думаю, что он имеет низкую производительность.
Я искал способ проверить разрешения реестра, прежде чем пытаться получить к нему доступ, но единственный найденный способ сделать это - это исключение с
RegistryPermission.Demand()
и проверьте исключение. Так что это не дает мне никакого преимущества при первоначальном подходе.
¿Есть ли способ проверить наличие разрешений на доступ к Реестру без искусственного сброса или проверки исключений?
Редактировать:
Похоже, предпочтительным способом .NET является попытка получить доступ к ресурсу и проверить наличие исключений. В статье, на которую указал Янник, показано, насколько сложно справиться с моделью безопасности Windows, отыскивая нужный доступ вручную.
Итак, я собираюсь немного изменить код, чтобы он проверял доступ только один раз (перехват исключений) и сохранял эту информацию, вместо того, чтобы постоянно выдавать исключения.
Это имеет тот недостаток, что если пользователь изменяет параметры безопасности «на лету», код будет продолжать отказывать в доступе к реестру. Однако это предпочтительнее, если нет простого и понятного способа проверки доступа.