我想检查我是否有显示的形式,允许用户更改都写在关键的一些设置之前,在注册表中特定键的写访问。RegistryPermission是如何工作的?
码消毒为清楚起见
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提供的,如果这是可能的权限系统的安全性。
我想我很难解释。根据客户端(例如大学)的不同,网络管理员将在该位置创建密钥,并使用该注册表中的ACL限制访问权限,以确保学生对该密钥具有只读访问权限。对于其他类型的设置,用户将在CURRENT_USER中写入自己的设置,除非该设置在LOCAL_MACHINE中被覆盖。 – 2009-08-31 22:26:59
但是,这就是我所做的,我使用OpenSubKey和写权限,并且完全删除了RegistryPermission。我会将这个答案标记为已接受,因为这是我所做的。 – 2009-08-31 22:28:41