C# 注册表API 32 vs 64位和VS2010设置

C# 注册表API 32 vs 64位和VS2010设置,c#,.net,c#-4.0,registry,installation,C#,.net,C# 4.0,Registry,Installation,我们有一个.net 4.0应用程序,它使用两个注册表项,还有一个vs2010安装和部署项目,它在setup中创建这些注册表项 问题-(默认)RegEdit显示键存在,但.net代码在具有正确路径的OpenSubKey上返回null(包括\) 事实证明,这是由于每个 这需要一些代码,比如 RegistryKey someFunc() { var r64o32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachin

我们有一个.net 4.0应用程序,它使用两个注册表项,还有一个vs2010安装和部署项目,它在setup中创建这些注册表项

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

事实证明,这是由于每个

这需要一些代码,比如

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

    return r64o32.OpenSubKey(regKey);
}
但是我不能测试上面的代码,因为我没有32位的机器,但是应用程序也需要在32位的机器上可用

因此,在以下方面寻求帮助:

  • 上述方法是否适用于64/32位
  • vs2010安装程序项目创建的安装程序是否安装了定义的注册表 基于计算机的64/32注册表项
  • 还有其他的问题吗

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

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

    还请记住,如果您在32位计算机上,那么OpenBaseKey将返回注册表32

    您的应用程序是在32位(x86)还是64位(AnyCPU)模式下运行?混合模式下,.exe在x86中,所有dll在AnyCPU模式下,不知道为什么.exe被设置为x86!从VS2010开始,exe项目模板默认为x86。您必须自己添加任何CPU。VS2008及更早版本默认为AnyCPU