Я пытаюсь проверить, есть ли у меня доступ на запись к определенному ключу в реестре, прежде чем отображать форму, позволяющую пользователю изменять некоторые параметры, записанные в этом ключе.
код санирован для ясности
public bool CanWrite()
{
string key = @"HKEY_LOCAL_MACHINE\SOFTWARE\MyHaccpPlan, Inc.\2.0";
try
{
RegistryPermission permission = new RegistryPermission(RegistryPermissionAccess.Write, key);
permission.Demand();
return true;
}
catch(SecurityException)
{
return false;
}
}
Я запускаю приложение, используя пользователя, который имеет доступ только для чтения. Проблема в том, что эта функция возвращает true, даже если у пользователя нет прав на запись.
Позже звонок типа
Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\MyHaccpPlan, Inc.\2.0", "Language", "fr-CA");
потерпит неудачу с UnauthorizedAccessException
.
Как правильно проверить права реестра перед попыткой записи в него?
Редактировать
Я не хочу, чтобы текущий пользователь мог писать там. Я хочу использовать эту запись в реестре в качестве признака того, что функция в программном обеспечении должна быть отключена. Но если пользователь является администратором, я хочу, чтобы программное обеспечение разрешило эту функцию. Цель состоит в том, чтобы сетевой администратор мог задавать настройки и пользователи не могли их изменять.
Но помимо собственно написания и ожидания его сбоя, я хочу проверить безопасность, используя систему разрешений, предлагаемую в .NET, если это возможно.