即使具有管理员权限也无法读取/写入HKLM注册表项和值

时间:2019-09-16 02:32:50

标签: c# windows registry

我正在尝试从C#应用程序读取(并最终编辑)HKEY_LOCAL_MACHINE中的某些键。 该应用程序已已以管理员身份启动(我已经使用requireAdmin创建了一个app.manifest),并且在启动时显示UAC。但是,我可以执行其他一些管理性的操作,但仍然无法访问HKLM。

使用此代码时,我得到System.Security.SecurityException:

foreach (string s in My.Computer.Registry.LocalMachine.GetSubKeyNames)
    {
     if .....
    }

经过多次尝试,似乎可以看到一些键(和值),但不是全部。 也许我可以使用setaccesscontrol做些事情,其他人有什么想法吗?我在网上找不到有关此文档的任何好的文档,每个人都说我必须通过清单文件来设置管理员权限,但是我已经做到了。

1 个答案:

答案 0 :(得分:1)

最可能的原因是,您试图从 64bit 应用程序读取 32bit 密钥,反之亦然。您可以在此处

了解有关registry virtualisation的更多信息

您将需要在应用中使用适当的位数,或使用以下内容读取写入

RegistryView Enum

  

指定要在64位操作系统上定位的注册表视图。

RegistryKey.OpenBaseKey

  

打开一个新的RegistryKey,它表示本地请求的密钥   具有指定视图的机器。