0

我们有一个 .net 4.0 应用程序,它使用了几个注册表项和一个 vs2010 设置和部署项目,它创建了这些键 @ setup

问题 - (默认)RegEdit 显示密钥存在,但 .net 代码在 OpenSubKey 上返回 null 且路径正确(包括 \ )

事实证明,这是由于每个 KB305097的 32 位和 64 位注册表

这需要代码,例如

RegistryKey someFunc()
{
    var r64o32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, 
                Environment.Is64BitOperatingSystem  ? RegistryView.Registry64 :    
           RegistryView.Registry32);

    return r64o32.OpenSubKey(regKey);
}

但是我无法测试上面的代码,因为我没有可用的 32 位机器,但该应用程序也需要在 32 位机器上可用

所以寻求帮助 -

  1. 上述方法对 64/32 位都正确吗?
  2. vs2010 安装项目创建的安装程序是否在基于机器的 64/32 注册表上安装定义的注册表项?
  3. 还有其他问题吗?
4

1 回答 1

0

无论您如何编译应用程序,您都不需要在RegistryView使用时进行特殊的大小写,这要求注册表的特定视图OpenBaseKey

RegistryKey r = Microsoft.Win32.RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
                                                        RegistryView.Registry64);

还要记住,如果你在 32 位机器上,那么 OpenBaseKey 将回退到 Registry32

于 2012-10-12T04:14:05.737 回答