CreateSubKey总是导致异常:"无法写入注册表项"

时间:2015-01-06 02:18:36

标签: c#-4.0 registry

代码非常简单:

var key = Registry.LocalMachine.OpenSubKey("Software").CreateSubKey("somekey", RegistryKeyPermissionCheck.ReadWriteSubTree);

...但我一直得到异常“无法写入注册表项”,即使我以管理员身份运行VS2010(或编译代码)。 我究竟做错了什么? 运行.Net Framework 4 Client Profile。

1 个答案:

答案 0 :(得分:1)

您正在尝试写信至HKEY_LOCAL_MACHINE。访问HKEY_LOCAL_MACHINE受到UAC的限制。您的用户可能是管理员,但除非以提升的权限启动进程,否则UAC将阻止写访问。

为了写入HKEY_LOCAL_MACHINE,您需要确保在使用提升权限运行的代码中执行注册表访问。为此,您需要:

  1. 将UAC清单添加到您的应用程序,以强制它以提升的权限执行。但是,这意味着用户每次运行应用程序时都必须处理UAC提升提示。

  2. 如果您不想提升应用程序,则需要将需要提升的代码部分分离到单独的进程中,或者在应用程序中将COM Elevation Moniker实例化的COM对象分开需要进行提升操作。