开发X64位系统,不但包含差异,如果使用注册表,注册表也是不同的。
来源:互联网 发布:硬件软件 编辑:程序博客网 时间:2024/05/19 00:16
如何通过使用 64 位版本 Windows 查看系统注册表 WOW6432Node
64 位版本 Windows 包含的默认 64 位版本注册表编辑器 (Regedit.exe) 可显示 64 位和 32 位的 注册表项。WOW64 注册表重定向器为 32 位程序提供了对应于 32 位程序注册表项的不同注册表项。在 64 位版本的注册表编辑器中,32 位注册表项显示在以下注册表项下: HKEY_LOCAL_MACHINE\Software\WOW6432Node使用默认的 64 位版本注册表编辑器,可以查看或编辑 64 位和 32 位的注册表项和项值。要查看或编辑 64 位注册表项,必须使用 64 位版本的注册表编辑器 (Regedit.exe)。还可以使用 %systemroot%\Syswow64 文件夹中的 32 位版本注册表编辑器查看或编辑 32 位注册表项和项值。在 32 位版本注册表编辑器中执行任务的方式与 64 位版本注册表编辑器没有区别。要打开 32 位版本的注册表编辑器,请按照下列步骤操作:
- 单击“开始”,然后单击“运行”。 在“打开”框中,键入 %systemroot%\syswow64\regedit,然后单击“确定”。
注意:除非使用 -m 开关启动注册表编辑器的第二个实例,否则,必须先关闭 64 位版本的注册表编辑器,然后才能打开 32 位版本的注册表编辑器(反之亦然)。例如,如果 64 位版本的注册表编辑器已经在运行,在第 2 步键入 %systemroot%\syswow64\regedit -m 可启动 32 位版本的注册表编辑器。
反射的注册表项
WOW64 注册表反射器可能会在反射过程中修改注册表项的内容和项值,目的是为了调整路径名等。因此,32 位的内容与 64 位的内容可能会有所不同。下面的注册表项会被反射: HKEY_LOCAL_MACHINE\Software\Classes HKEY_LOCAL_MACHINE\Software\COM3 HKEY_LOCAL_MACHINE\Software\Ole HKEY_LOCAL_MACHINE\Software\EventSystem HKEY_LOCAL_MACHINE\Software\RPC原先一个win32程序好好地,由于组里不少人用了win 7 64位操作系统,指出原程序有bug,程序不能在64位的操作系统上跑。搞了很久,后来网上搜到一些资料说:64位的操作系统:
xp下具体的程序在电脑中的位置位于:
HKEY_LOCAL_MACHINE\SOFTWARE
vista中是位于
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
如果你在vista64下面依然访问如下位置,
HKEY_LOCAL_MACHINE\SOFTWARE
你得到的其实就是vista下
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
的列表。
这其中其实是WOW进行了转换。其中并给出了判断64位还是32位平台的函数:
IsWow64返回TRUE则是64位系统,否则为32位系统。
code如下:VC测试通过
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
// handle error
AfxMessageBox("IsWow64 error!");
}
}
return bIsWow64;
}
然而,奇怪的是:当我们判断为: IsWow64()时,我便将注册表的地址必为:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\我要读的程序名
依然读取不成功。后来请教了一位老同事,他说这种问题,应该看微软的最新的msdn。随即搜了搜,发现:
Do not try to open Wow6432Node to view the alternate registry hive in 32-bit code. Instead open the desired branch (e.g., HKLM\Software\Microsoft\xxx) with the KEY_WOW64_64KEY flag as shown above.
意思是说:访问时,不要去打开Wow6432Node ,而应在API里使用 KEY_WOW64_64KEY 。
最后,在64位的机器上跑时,使用KEY_WOW64_64KEY标识:
retCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,subKeyName.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_EXECUTE|KEY_WOW64_64KEY, NULL, &hkey, NULL);
问题果然解决了!
加油!征途才刚刚开始!
Wow6432注册表项表明你正在运行64位版本的Windows 。操作系统使用此密钥为32位的64位版本的Windows上运行的应用程序提出HKEY_LOCAL_MACHINE \软件的一个单独的视图。当32位应用程序查询下一个值在HKEY_LOCAL_MACHINE \ SOFTWARE \ <company> \ < ...子项,应用程序读取的HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ...子项。下图显示了下的Wow6432Node结构, 32位应用程序将看到。一个“注册表反射器”复制某些值之间的32位和64位注册表视图(例如,主要用于COM注册) ,并使用最后一个作家胜的方式解决任何冲突。- 开发X64位系统,不但包含差异,如果使用注册表,注册表也是不同的。
- C# 32位/64位系统下程序读写注册表之差异
- Windows64位系统注册表读取
- x64系统的判断和x64下文件和注册表访问的重定向(1)
- x64系统的判断和x64下文件和注册表访问的重定向(2)
- x64系统的判断和x64下文件和注册表访问的重定向(3)
- x64系统的判断和x64下文件和注册表访问的重定向(1)
- x64系统的判断和x64下文件和注册表访问的重定向(2)
- x64系统的判断和x64下文件和注册表访问的重定向(3)
- C# 32位/64位程序读写注册表之差异
- NSIS访问X64注册表
- 64位系统下操作注册表的注意事项
- 将python2.7 添加进64位系统 的注册表
- Win7 64位注册表与32位注册表的区别
- Win7 64位注册表与32位注册表的区别
- Beyond Compare比较注册表差异的方法
- delphi 注册表的使用
- 注册表的使用
- 在.NET环境中使用单元测试工具NUnit
- Dialog里监听ESC按键事件
- SQL Server 2000 和 SQL Server 2005 自动备份攻略
- android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
- java 对象序列化实现复杂UI对象状态的保存。
- 开发X64位系统,不但包含差异,如果使用注册表,注册表也是不同的。
- JScrollPane实现自动滚动到底部
- 不对窗体进行边框装饰后,实现对鼠标事件的监控
- 统一设置Swing组件的背景色和字体
- WP8 发布表明 Nokia 将随着 Windows Phone 一起完蛋
- DOM
- NUnit详细使用用法(补充)--在.NET中如何利用NUnit测试Private和Protected方法
- 利用层实现ToolTip,利用图形组合实现不规则的ToolTip
- java提取rar文档中的文本数据