我正在尝试写入HKEY_CURRENT_USER \ Software \ appname中的Windows注册表,但是当我尝试写入密钥时,我一直收到权限错误,我已将以下内容添加到我的程序集中:
[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, Write = @"HKEY_CURRENT_USER\\Software")]
但这还没有解决问题,我还应该做些什么吗?
答案 0 :(得分:8)
我认为这并不像你打开密钥那样简单而没有指定你想要写访问权限? OpenSubKey(string)
方法仅提供只读访问权限。
答案 1 :(得分:7)
RegistryPermissionAttribute是Code Access Security aka CAS的一部分,这是一个权限系统,用于检查.NET框架内部的权限,这些权限由安全策略定义。 There are 4 security policies:
前三个在.NET配置工具的配置屏幕中配置,最后一个在运行时配置。
我首先解释这一点的原因是RegistryPermissionAttribute仅检查您的.NET权限,但它不检查操作系统权限。
您可以使用System.Security.AccessControl检查操作系统权限,但要获取您可能需要升级或模拟的权限。
答案 2 :(得分:0)
确保应用使用具有足够权限访问注册表的用户帐户运行。
答案 3 :(得分:0)
我在这里没有看到答案或解决方案。我在搜索其他东西时发现了这个问题。
我认为可能需要的一件事是,如果您从exe运行,则需要以管理员身份运行。如果您从VS运行,则需要确保VS以管理员身份运行。如果是,VS将在窗口标题中显示"(管理员)。
答案 4 :(得分:-1)
这对我有用。已经存在密钥而没有它。没有任何特殊的装配属性。
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);
}
}
}
}
编辑:重新阅读问题之后,似乎问题可能是操作系统权限。