如果有人可以帮我解决我堆积的问题,我会很感激。
我在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)
谢谢
答案 0 :(得分:1)
很可能您在64位系统上运行32位进程,registry redirector将您带到注册表的32位视图。那些钥匙不存在的地方。
您的选择包括:
RegistryView
枚举打开注册表的64位视图。请注意,这需要.net 4.对于旧版本的.net,您需要使用p / invoke从32位进程读取注册表的64位视图。