以编程方式访问注册表时出现问题

本文关键字:问题 注册表 编程 方式 访问 | 更新日期: 2023-09-27 18:24:55

我使用C#以编程方式读取注册表值时遇到问题。我查阅了许多网站并提供帮助,但找不到任何帮助。当我在提升模式下运行VS时,我可以访问和读取注册表,但当我在非提升模式下执行VS时,会遇到问题。最初,我开始使用以下代码

byte[] val = (byte[])Registry.GetValue("HKEY_LOCAL_MACHINE''Software''MyServices''Identity''ASPNET_SETREG", "ValueName", 0);

这在提升模式下运行良好,但在非提升模式下失败。将属性置于功能的顶部

[RegistryPermissionAttribute(SecurityAction.Demand,Unrestricted=true)]

这无济于事。然后尝试

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.AllFlags)] 

还是没用。现在我尝试了以下代码。。。

RegistryKey key = Registry.LocalMachine;            

        RegistrySecurity rs = new RegistrySecurity();
        rs = key.GetAccessControl();
        string user = "DomainName''Username";
        rs.AddAccessRule(new RegistryAccessRule(user,
        RegistryRights.ReadKey,
        InheritanceFlags.None,
        PropagationFlags.None,
        AccessControlType.Allow));

        key.SetAccessControl(rs);//Exception: "Attempted to perform an unauthorized operation."}
        //RegistryKey key2 = key.OpenSubKey("Software''MyServices''Identity''ASPNET_SETREG");
        //RegistryKey key2 = key.OpenSubKey("Software''MyServices''Identity''ASPNET_SETREG", false);
        //RegistryKey key2 = key.OpenSubKey("Software''MyServices''Identity''ASPNET_SETREG", RegistryKeyPermissionCheck.ReadSubTree);
        RegistryKey key2 = key.OpenSubKey("Software''MyServices''Identity''ASPNET_SETREG", RegistryKeyPermissionCheck.ReadSubTree, RegistryRights.ReadPermissions);

评论SetAccessControl并使用任何OpenSubkey选项,我得到异常:"不允许请求的注册表访问。"

我被严重卡住了,无法继续前进。

以编程方式访问注册表时出现问题

private RegistryKey keyR = Registry.CurrentUser.OpenSubKey("Software''YourKey",true);
private RegistryKey keyW = Registry.CurrentUser.CreateSubKey("Software''YourKey");
public string version
{
    get { return keyR.GetValue("VERSION", "", RegistryValueOptions.DoNotExpandEnvironmentNames).ToString(); }
    set { keyW.SetValue("VERSION", value, RegistryValueKind.String); }
}

我以这种方式使用windows注册表。没问题。。。

windows注册表基本上是一个结构化的文件系统,具有键和值的权限。

您没有对...'MyServices'或更深层次的密钥正确设置权限-您没有权限从您的无特权进程访问这些密钥。

任一:

  1. 这些密钥应该是任何人都可以读取的,所以您应该更改权限以使它们对每个人都可读。或者-
  2. 出于充分的原因,这些密钥被有意限制,因此它们不应该被所有人都可读,在这种情况下,您的程序应该始终在提升的状态下运行