4

我有以下 C# 代码,它从 Windows 7 的注册表中读取 UAC 状态

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

它在具有管理员/非管理员帐户的 Windows 7 上完美运行。它总是返回我在 Windows 8 下提供的默认值。注册表项在那里。我可以通过 regedit 看到它的价值。但是 C# 代码不会读取它。谁能告诉我为什么?这是一个 .net 4 应用程序。用户帐户是未提升的管理员。

4

2 回答 2

4

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

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

请注意,我们调用GetValue方法 on Registry,而不是 on Registry.LocalMachine,并且我们将键和值名称作为两个单独的参数传递。

于 2014-12-05T03:34:43.630 回答
-1

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

于 2013-08-25T19:57:55.237 回答