无法访问Windows Server 2008 Enterprise上的HKEY_CLASSES_ROOTInsta

本文关键字:HKEY 上的 CLASSES ROOTInsta Enterprise 2008 访问 Windows Server | 更新日期: 2023-09-27 18:23:52

如果有人能帮我解决我遇到的问题,我将不胜感激。

我用C#编写了一个简单的程序来检查以下密钥是否存在HKEY_CLASSES_ROOT''Installer''UpgradeCodes''product_upgrade_GUID

除Windows Server Enterprise 2008 x64 SP2外,它在所有Windows(如果存在该键)上都返回true,尽管存在该键,但在该Windows上它仍返回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();

有人知道访问安装程序Windows注册表的限制吗?(UAC已禁用,用户为管理员)

感谢

无法访问Windows Server 2008 Enterprise上的HKEY_CLASSES_ROOTInsta

很可能您正在64位系统上运行一个32位进程,而注册表重定向程序正在将您带到注册表的32位视图。那些钥匙不存在的地方。

您的选择包括:

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