2012-07-08 57 views
0

我正在编写一个程序,使用c编辑注册表#确定用户是否有权编辑注册表?

我想检查用户是否有权在程序加载时进行编辑。什么是检查C#的最佳方式?

+0

可能重复的[如何获得注册表写入权限在C#](http://stackoverflow.com/questions/721145/how-to-get-registry-write-permissions-in-c-sharp) – 2012-07-08 11:59:29

回答

1

尝试打开带有写权限的RegistryKey。如果它给你一个Exception,你没有权限。 你甚至可以指定某个特定的例外,表示你没有权限。

2

注册表中的每个节点都有自己的ACL(Access Credential List)。没有一个权利。

通常,每个应用程序在HKLM配置单元或HKCU配置单元中都有自己的注册表节点,或者两者都有。

在前一种情况下,用户必须是计算机的管理员,后者用户可以读/写自己的注册表。

要检查实际访问权限,可以使用RegistryKey.GetAccessControl method

但是,如上所述,您必须具有至少读取权限才能调用此方法。

+0

我在做 var temp = registryKey.GetAccessControl(); 但在临时它不是给我说读或写的价值? – 2012-07-08 12:11:35

+0

var temp = registryKey.GetAccessControl()。AccessRightType – 2012-07-08 12:12:47

0

用户应该无权编辑“完整注册表”,他们只应具有编辑注册表中某些键的权限。

你最好做一个尝试捕捉系统

try{ 
    // Do registry edit 
} 
catch { 
    Console.Log("Sorry you don't have permission to edit this key"); 
} 

每个用户都是不同的,可以访问某些部分,全部或部分使用Windows ACL注册表的任何部分。

看看这里的first answer

1
try{ 
    Registry.CurrentUser.OpenSubKey(@"PATH\TO\STUFF", true); 
    // Have write permissions. 
} 
catch { 
    // Do not have write permissions. 
}