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