C# 如何在C中获得注册表写入权限#

C# 如何在C中获得注册表写入权限#,c#,C#,我正在尝试写入HKEY_CURRENT_USER\Software\appname的windows注册表。但是,当我尝试写入注册表项时,我不断收到权限错误,我已将以下内容添加到我的程序集中: [assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, Write = @"HKEY_CURRENT_USER\\Software")] 但这并没有解决问题,还有什么我应该做的吗?我不认为这是一件简单的事情,因为您打开了密

我正在尝试写入HKEY_CURRENT_USER\Software\appname的windows注册表。但是,当我尝试写入注册表项时,我不断收到权限错误,我已将以下内容添加到我的程序集中:

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, Write = @"HKEY_CURRENT_USER\\Software")]

但这并没有解决问题,还有什么我应该做的吗?

我不认为这是一件简单的事情,因为您打开了密钥,但没有指定您想要写访问权限?
OpenSubKey(string)
方法仅提供只读访问。

是的一部分,这是一个权限系统,用于检查您在.NET framework内部拥有的权限,这些权限由安全策略定义:

  • 企业-作为Active Directory安装一部分的一系列计算机的策略
  • Machine—当前计算机的策略
  • 用户-已登录用户的策略
  • AppDomain—正在执行的应用程序域的策略
前3个在.NET配置工具的配置屏幕中配置,最后一个在运行时配置

我之所以首先解释这一点,是因为RegistryPermissionAttribute只检查您的.NET权限,而不检查操作系统的权限


您可以使用检查操作系统权限,但要获得权限,您可能需要提升或模拟权限。

这对我很有用。钥匙已经在那里,但没有。没有任何特殊的程序集属性

using System;
using Microsoft.Win32;

namespace WriteToRegistry {
  class Program {
    static void Main(string[] args) {
      const string csRootKey = @"Software\MyCompany\Test";

      using (RegistryKey loRegistryKey = Registry.CurrentUser.CreateSubKey(csRootKey)) {
        if (loRegistryKey == null)
          throw new InvalidOperationException("Could not create sub key " + csRootKey);

        loRegistryKey.SetValue("CurrentTime", DateTime.Now.ToString(), RegistryValueKind.String);
      }
    }
  }
}

编辑:重读问题后,问题似乎是操作系统权限问题。

确保应用程序使用具有足够权限访问注册表的用户帐户运行。

我在这里看不到答案或解决方案。我在寻找其他东西时发现了这个问题


我认为可能需要做的一件事是,如果您是从exe运行,则需要以管理员身份运行。如果您是从VS运行的,则需要确保VS以管理员身份运行。如果是,VS将在窗口标题中显示“(Administrator)。

请发布用于写入密钥的代码。一个简短但完整的示例非常理想。任何应用程序都可以写入当前用户节点。本地计算机和其他计算机受操作系统保护。