纠结的x64

来源:互联网 发布:降龙990会计核算软件 编辑:程序博客网 时间:2024/05/06 09:27

在64位Windows系统中,除了16位程序或32位驱动外,32位程序代码无需修改为64位代码即可通过Windows-32-on-Windows-64  (WOW64) 子系统运行。

为了兼容性和预防32位程序意外访问64位程序的数据,WOW64子系统通过重定向注册表调用或部分文件系统调用。比如%systemroot%\System32和Program  Files目录都是用于64位程序的,32位程序访问这些目录就会被重定向到%windir%\SysWOW64和Program Files  (x86)目录。

但这种为了兼容的设计会照成一些问题,比如通过命令提示符执行一些以前用于.bat 和  .cmd批处理脚本,就可能造成不像你期望的那样对“Program  Files”“%windir%\System32″内的文件进行安装访问删除操作,因为这些脚本是用于以前32位程序的话本应该重定向到Program  Files (x86)和%windir%\SysWOW64,而cmd运行或直接双击这些脚本使用的却是64位的cmd。

有两个解决办法:
一、修改脚本文件。
二、不修改文件,直接开始菜单搜索框输入%windir%\SysWoW64\cmd.exe运行32位的cmd,这样通过它运行的脚本就会自动重定向这些内容。

当然注册表也会有同样问题,比如以前论坛里有个网友就问过为何导入的注册表没有效果我就为他解答过:它的情况是一个提取出的游戏吧,第一次运行需要导入一 个注册表文件,双击导入的话就游戏还是无法运行,当然游戏是32位的,你直接双击是调用64位的regedit导入到 HKEY_LOCAL_MACHINE\SOFTWARE,而游戏运行访问注册表时却要被重定向到HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node,当然会出现问题了,然而一般的安装版却不会又问题,因为安装程序是32位安装时就是被重定向到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node的,运行时当然没问题了。

解决方法也很简单:
一,修改文件,例如把文件中的HKEY_LOCAL_MACHINE\SOFTWARE都改为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node。
二,不修改文件,%windir%\SysWoW64\regedit.exe '要导入的注册表文件路径',这样调用32位的regedit导入注册表文件。

http://msdn.microsoft.com/en-us/library/aa384187%28v=vs.85%29.aspx 在64位系统下,默认运行32位程序(包括cmd)

因此:

32位程序如果在批处理中要转向到实际的system32文件夹,就必须用 %windir%\sysnative

而转向到实际的syswow64文件夹便直接是 %windir%\system32
0 0
原创粉丝点击