无法访问Windows Server 2008 Enterprise上的HKEY_CLASSES_ROOT \ Installer

时间:2012-02-07 17:06:26

标签: c# registry

如果有人可以帮我解决我堆积的问题,我会很感激。

我在C#中编写了一个简单的程序来检查以下密钥是否存在 HKEY_CLASSES_ROOT \安装\ UpgradeCodes \ product_upgrade_GUID

它在所有Windows上返回true(如果密钥存在),除了在Windows Server Enterprise 2008 x64 SP2上,它返回System.NullReferenceException,尽管密钥存在。 实际上,如果我尝试访问\ Installer注册表中的任何键,我会得到NullReferenceException。看起来这个安装程序密钥以某种方式受到保护。 尝试访问“HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UpgradeCodes”键时会发生同样的事情。

以下代码应返回“HKEY_CLASSES_ROOT \ Installer”,但它返回NullReferenceException:

RegistryKey rk = Registry.ClassesRoot.OpenSubKey(@"Installer");
return rk.ToString();

有没有人知道访问Installer Windows注册表的任何限制? (UAC已禁用,用户为admin)

谢谢

1 个答案:

答案 0 :(得分:1)

很可能您在64位系统上运行32位进程,registry redirector将您带到注册表的32位视图。那些钥匙不存在的地方。

您的选择包括:

  • 使用RegistryView枚举打开注册表的64位视图。请注意,这需要.net 4.对于旧版本的.net,您需要使用p / invoke从32位进程读取注册表的64位视图。
  • 切换到64位进程。