无法读取我有以下的C#代码在Windows 8

问题描述:

注册表值,其内容在Windows 7无法读取我有以下的C#代码在Windows 8

object obj = Registry.LocalMachine.GetValue(@"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA", (long)1); 

它完美的Windows 7管理员/非管理员帐户从注册表中的UAC状态。 它总是返回我在Windows 8下提供的默认值。 注册表项在那里。我可以用regedit看到它的价值。但C#代码不会读取它。任何人都可以说出原因吗?它是一个.net 4应用程序。该用户帐户是未上架管理员。

+3

“不读它”是什么意思?任何异常,意外的结果......? – ken2k 2013-03-06 10:54:02

+0

听起来像是它正被操作系统阻止。您是否要求在代码中访问注册表的那部分权限? – 2013-03-06 11:14:30

+0

这会帮助你。请参阅http://stackoverflow.com/questions/12298199/c-sharp-read-registry-windows-8 – 2013-03-06 11:15:21

您需要至少需要管理权限才能默认访问注册表。 Windows 8开发人员可能认为保持这种方式更安全。

+1

不,你不需要管理员权限来阅读注册表。如果你做到了,那么如何工作?试想一下,非管理员用户无法读取注册表的世界。 – 2013-08-25 20:29:23

+0

越来越多的人看到来自拥有1点信誉的用户的StackOverflow的愚蠢无稽之谈。他们就像垃圾邮件发送者。 – Elmue 2015-07-09 16:21:36

它返回默认值(在Windows 7和Windows 8上)。以下是在Windows 7和Windows 8上读取正确的注册表值的代码,不需要以管理员身份运行。

 object obj = Registry.GetValue( 
      @"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\", 
      "EnableLUA", 
      (long)1); 

请注意,我们所说的GetValue方法上Registry,而不是Registry.LocalMachine,并且我们通过键和值的名称作为两个单独的参数。