无法在C#中写入HKEY_CURRENT_USER registrykey

时间:2013-10-01 14:23:52

标签: c# .net registry

我已经在这里搜索谷歌和答案了一段时间,并得出结论,当写入注册表时,HKEY_CURRENT_USER应该在没有UAC的情况下可用,对吗?无论如何,每个线程似乎都是这样。我的问题是,在尝试访问此密钥并写入新值时,我收到了拒绝访问错误。这是因为我的注册表有问题还是我做错了什么?这是我正在使用的代码:

string runKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
RegistryKey startupKey = Registry.CurrentUser.OpenSubKey(runKey, true);
startupKey.SetValue("Arebokerts application", '"' + Environment.CurrentDirectory +     "\\arebokert.exe" + '"', Microsoft.Win32.RegistryValueKind.String);

任何人都可以如此善良并对这个问题有所了解吗?我想远离任何类型的UAC提示,并且能够在没有UAC权限的情况下运行它。此代码抛出“UnauthorizedAccessException”。有什么问题?

最好的问候,arebokert

修改

正如大卫和汉斯在评论中指出的那样,这个问题是由于阻止我改变密钥的原因。我发现它是comodo防病毒软件,因此我将其关闭了。这使应用程序正常运行。感谢您的回复!

1 个答案:

答案 0 :(得分:5)

您的代码很好,默认情况下,标准用户可以写入HKCU。问题是系统拒绝您写入对注册表部分的访问权限。最可能的解释是:

  1. 运行此代码的计算机已保护该特定密钥以限制写访问。检查regedit是否属于这种情况。导航到密钥,右键单击树视图中的密钥,然后选择权限。选择您的用户名并查看您拥有的权限。您应该选中“允许”以检查“完全控制”和“读取”。

  2. 您运行的防病毒或防恶意软件产品阻止了对该密钥的写入权限。由于此密钥被恶意软件广泛使用,因此反恶意软件产品的反击并不少见。您可以通过暂时禁用所有防病毒或防恶意软件产品来诊断这是否是原因。