Registry API 32与64位和VS2010设置

时间:2012-10-12 03:37:41

标签: c# .net c#-4.0 registry installation

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

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

事实证明,这是由于32&每个KB305097

的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 / 32bit的上述方法吗?
  2. 由vs2010安装项目创建的设置是否安装了已定义的注册表 根据机器在64/32注册表上输入?
  3. 还有其他陷阱吗?

1 个答案:

答案 0 :(得分:0)

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

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

还要记住,如果你使用的是32位机器,那么OpenBaseKey将会回退到Registry32