2013-10-01 60 views
5

我已经搜索谷歌和这里的答案现在一段时间,并得出结论,写入注册表时,HKEY_CURRENT_USER应该可用没有UAC,正确?无论如何,每个线程似乎都是这样。我的问题是,当试图访问此密钥并写入一个新值时,我遇到访问被拒绝错误。这是由于我的注册表有问题吗?或者我做错了什么?以下是我正在使用的代码:无法写入HKEY_CURRENT_USER在C#中的注册表项#

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 antivirus,所以我把它关掉了。这使得应用程序功能正常。感谢您的回复!

+0

管理员可以在每个单独的密钥上覆盖访问权限。这个名单将是最高的。运行regedit.exe,右键单击密钥Permissions。 –

+0

对于我来说,这恐怕不是一个可行的解决方案。此应用程序也将在我的其他电脑上运行,因此更改每台电脑的权限不是一种选择。感谢您的建议。 – arebokert

+0

@arebokert这不是汉斯所说的。汉斯表示,您的注册表有可能被拒绝您的用户权限来执行您正在尝试的权限。在这种情况下,不要求其他解决方案会有所帮助。如果安全性拒绝你访问,你不能绕过它。如果可以的话,它不会是这个安全的。 –

回答

5

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

  1. 在其上运行该代码的机器已经有固定限制的写访问特定的密钥。检查注册表是否属于这种情况。导航到该键,右键单击树视图中的键并选择权限。选择您的用户名并查看您拥有的权限。您应该允许同时检查完全控制和读取。

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

+0

这是我的问题的解决方案。 Comodo antivirus阻止我写入注册表,当我关闭它时,写入成功!非常感谢大卫! – arebokert

+0

噢,好的:p – Nyerguds