如何在没有管理员权限的情况下从注册表中读写内容_C#

4

我需要在没有管理员权限的情况下写入和读取注册表中的键值。首先我想知道这是否有可能实现?

请查看以下代码(当 Visual Studio 以管理员模式打开时,它可以正常工作)

写入:

RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);

key.CreateSubKey("AppName");
key = key.OpenSubKey("AppName", true);

key.CreateSubKey("AppVersion");
key = key.OpenSubKey("AppVersion", true);

key.SetValue("myval", "677");
key.Close();  

阅读

RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);

  key.CreateSubKey("AppName");
  key = key.OpenSubKey("AppName", true);
   //if it does exist, retrieve the stored values  
  if (key != null)
  {
    string s = (string)key.GetValue("myval");
    Console.Read();
    key.Close();
   }  

请帮忙提供一种方法来解决这个问题。(我尝试添加以下行) < p > < em > < p > < strong > 错误 : < blockquote > < p > ClickOnce 不支持请求执行级别“requireAdministrator”。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> - saraa
Registry.CurrentUser ? - ProgrammingLlama
@john:是的,完全正确。 - saraa
5
可能是What registry access can you get without Administrator privileges?的重复问题。 - ProgrammingLlama
4
没有管理员权限就不能写入HKLM。你可以降低其安全级别以允许写入,但这也需要管理员权限,并且还会使您的计算机面临安全漏洞。如果需要将某些内容写入HKLM,请编写一个安装程序并由拥有管理员权限的用户运行安装程序,在安装期间写入注册表项并保持保护不变。然后,您的应用程序可以在非管理员身份下从HKLM读取。(建议您在提问之前进行搜索。这个问题已经在这里被问过(并回答)很多次了。) - Ken White
显示剩余2条评论
1个回答

0

这里有一个关于如何在没有管理员权限的情况下写入注册表的答案how to write in registry without admin

使用RegistryKeyPermissionCheck.ReadSubTree选项进行读取

    RegistryKey baseRegistryKey = RegistryKey.OpenBaseKey(baseKey, RegistryView.Registry64);
    RegistryKey subRegistryKey = baseRegistryKey.OpenSubKey(subKey, RegistryKeyPermissionCheck.ReadSubTree);
    if (subRegistryKey != null)
    {
        object value64 = subRegistryKey.GetValue(value);
        if (value64 != null)
        {
            baseRegistryKey.Close();
            subRegistryKey.Close();
            return value64;
        }
        subRegistryKey.Close();
    }            
    baseRegistryKey.Close();

然后使用RegistryView.Registry32执行相同的操作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接