C# 32位程序与64位程序读\写注册表的区分

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;

 namespace OperateRegistrationTable 
{ 
     class Programe
     {
         static void Main(string[] args)
         {
             OperatingRegistryKey();
         }

         public static void OperatingRegistryKey()
         {
             string keyValue = string.Empty;
             try
             {
                 //向注册表中写信息
                 using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\EricSun\MyTestKey", true))
                 {
                     if (key == null)
                    {
                         using (RegistryKey myKey = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\EricSun\MyTestKey"))
                         {
                             myKey.SetValue("MyKeyName", "Hello EricSun." + DateTime.Now.ToString());
                         }
                     }
                     else
                     {
                         key.SetValue("MyKeyName", "Hello EricSun." + DateTime.Now.ToString());
                     }
                 }

                 //读取注册表信息
                 using (RegistryKey currentKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\EricSun\MyTestKey", false))
                 {
                     if (currentKey == null)
                     {
                         Console.WriteLine("Hello EricSun, The Key you tried to open doesn't exist.");
                     }
                     else
                     {
                         keyValue = currentKey.GetValue("MyKeyName").ToString();
                         Console.WriteLine("The Key Value is: {0}", keyValue);
                     }
                 }
             }
             catch (Exception ex)
             { }
         }
     }
 }

  若我们对这段程序不做任何修改,在X64(或Any
Cpu)的平台下编译、运行以来,会发现在注册表的SoftWare节点的率先层子节点中创建出了EricSun节点(并在此节点下成立相应的注册表信息),然后大家用同一的次序去读注册表的时候也会发现她们读取的位置不同(以程序中的时间信息加以区别)

转载于:http://www.cnblogs.com/mingmingruyuedlut/archive/2011/01/20/1940371.html

  总结:X64,(或者Any Cpu)
Platform下的程序会操作64位机器存放注册表地方的注册表消息,X86
Platform下的程序会操作32位机器存放注册表地点的注册表新闻(即:WOW6432Node节点下的注册表新闻)

  32位与64位特点的多少个第一表现方面为:文件系统与注册表

  

  既然知道了注册表消息分成了两有的,那么就可以想到:用32位程序和64位程序去操作注册表的时候会操作不同地点的注册表音信。上面例子可以丰裕注明这种说法。

  用C#操作注册表重要接纳的五个函数为(已经渗透到下面的实例程序中,注:要引入Microsoft.Win32命名空间):

  将此段程序在X86(32位)平台下编译、运行,会意识在注册表的WOW6432Node节点下开创了子键:埃里克(Eric)(Eric)Sun\MyTestKey,并且填充了键MyKeyName的值(用时间再说区分其值),而在SoftWare的第一层子节点中并从未发现此埃里克(Eric)Sun。可以规定32位程序是操作注册表新闻是置身WOW6432Node节点下的

      1:读取键值–>Registry.LocalMachine.OpenSubKey(“..Key的路径…”,
true),这里的第2个bool类型的参数含义为:标志打开的键值是否可以更改(即:是否足以用SetValue()给键赋值),然后调用GetValue()方法就能把键值读取出来。

  这里最首要助教一下32位程序和64位程序在64位平台上读\写注册表的界别【注:32位程序是–>Build的Platform
target为X86;64位程序–>Build的Platform
target为X64;并且VS2010在默认的状态下为X86编译环境(即:32位)】

  用C#落实注册表的读\C#,写是一件很容易的事务,在此不做详细的授课。

  简要复述一下答辩功底:微软为了让32位程序不做任何修改就能运行在64的操作系统上,添加了一个充裕重大的WOW64子系统来实现这么些意义,WOW64是Windows-32-on-Windows-64的简称,从总体上来说,WOW64是一套基于用户形式的动态链接库,它可以把32位应用程序的暴发的指令翻译成64位系统能够接受的格式,即:WOW
层处理诸如在 32 位和 64 位情势里面切换处理器以及模仿 32
位系统的事体。

      2:写入键值–>Registry.LocalMachine.CreateSubKey(“..Key的路径…”),然后调用SetValue()写入键值。

      注册表:为了防范注册表键顶牛,64位机器注册表音讯分成了多个部分。一部分是特别给64位系统(即:64位程序)访问的,另一片段是专程给32位系统(即:32位程序)访问的,放在Wow6432Node下面。(Wow6432Node这几个节
点存在于HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下面)

      文件系统:32位过程无法加载64位Dll,64位过程也不得以加载32位Dll。

 

相关文章