文档章节

Windows 32 64 位系统存放Dll

陶邦仁
 陶邦仁
发布于 2012/08/24 17:50
字数 1702
阅读 320
收藏 4

有时候人们怀疑一个系统的底层结构能否保证这个系统在被使用时达到安全而高效,64位版本的Windows在这方面就比较完美。Windows XPWindows Server 2003都是运行64位硬件的64位版本操作系统。64Windows操作系统运行64位代码,同时通过使用WoW64(Windows on Windows 64)也能运行32位代码。
       
你看,这并不是什么大问题,毕竟,32位版本的不同Windows操作系统都用来同时运行32位和16位代码。(技术上说,并不是同时运行,相关解释在以后的技巧中会展示给大家)
       32
位版本的Windows在如何允许32为和16位代码并肩运行方面有着很复杂的机制。然而,这个系统被设计成无论你是系统管理员还是临时用户,你都不需要知道这些机制如何运行。
但是64位版本的Windows就不同了。从一个用户的立场上看,64位应用程序和32位应用程序简单地同时运行,没有什么特殊的。但是对于一个管理员(和帮助桌面用户的人员)来说,这其中就有很大不同了:32位代码与64位代码相隔离。这个隔离是如此重要以至于64位版本的Windows有两个注册表,一个是针对64位,一个是针对32位。
尽管64位版本的Windows XPWindows Server 2003看起来在操作时候和它们32位的版本几乎同样的,但是在表象之下其实是有很大不同的。如果你在64位版本的Windows下按照32位版本一样来执行某些程序,你可能引起一些麻烦。
DLL
存放到何处?
64
位应用程序的第一条规则是:你绝对不能把32位和64位代码混和在同一个应用程序内。如果你有一个64位应用程序,所有与这个应用程序相关的东西,包括DLL文件,必须是64位的。这就有一个有趣的挑战,因为有时候很多应用程序都依靠一个共同的DLL文件。幸运的是,Windows保持32位的DLL文件和64位的DLL文件处于隔离状态。
如果你查看一下在32位操作系统内的/Windows文件夹,你会发现两个子目录:一个名为SYSTEM,还有一个名为SYSTEM32SYSTEM目录是Windows 3.x遗留下来的,用来保持Windows的对一些旧的应用程序的向下兼容性。一般说来,16位的DLL文件(以及其它的支持文件)被存放在/Windows/System文件夹里,32DLL文件和不同支持文件被存放在/Windows/System32文件夹里。
32
位版本的Windows保持16位和32DLL文件的方式是非常简单的,但是64位版本的Windows保持64位和32DLL文件的方式就不这么简单了。
理论上说,微软将要创建一个名为/Windows/System64的文件夹来用其存放64DLL文件,但是取而代之的是,微软创建了一个新的名为SysWOW64的文件夹来存放32位的DLL文件。第一眼看起来,让人感觉这个文件夹应该存放64位应用程序的,但是注意,32位应用程序本来应该存放它们的DLL文件到/Windows/System32文件夹里面。
/Windows/System32
文件夹在64位版本的Windows内仍然存在。但是微软使用这个文件夹做为64DLL的仓库,而不是32DLL文件的。我不清楚微软使用/Windows/System32文件夹来存放64DLL的原因,但是我听说这么做是为了向下兼容性。
那么是不是所有32位应用程序该存放它们的DLL文件到/Windows/System32文件夹呢?这又让事情变得混乱。
如我之前所提及的,32位代码不能默认在64位版本的Windows内运行。为了运行32位的应用程序,Windows使用WOW64 emulator,来让这些应用程序还认为它们在32位版本的Windows内运行。
当你安装一个32位的应用程序,安装向导通过WOW64 emulato运行。32位和64位代码并不混和。一旦一个应用程序(包括一个安装向导)WOW64 emulator开始运行,它必须接着在WOW64内继续运行。这意味着当你安装一个应用程序,安装向导并不知道这个程序被安装到64位版本的Windows内,并且和它运行在32位操作系统一样把DLL文件写到/Windows/System32文件夹里面。
当然,WOW64知道安装向导通过emulator来运行的32位应用程序。同时也知道6432位代码不能混合在一起。所以,WOW64 emulator /Windows/SysWOW64创建一个别名。这意味着任何时候32位应用程序要写入到/Windows/System32文件夹或者从/Windows/SysWOW64文件夹读取,WOW64 emulator都能使其改道到/Windows/SysWOW64文件夹。
所有这些都意味着如果你需要手动操作/Windows/System32文件夹内的内容,你可能要非常的麻烦。我最近了解到一个管理员需要安装一些小的支持脚本到一个已经安装的应用程序,这个脚本的指导上说明这些脚本需要被存放到/Windows/System32文件夹。当然这些脚本的说明假定这个应用程序是在32位操作系统上运行的。
这些脚本没有引起系统崩溃。然而Windows给人幻想永远不用进行更新。当管理员运行应用程序,它将被改道到/Windows/SysWOW64文件夹。管理员知道他自己把这些脚本放到/Windows/System32文件夹并且能通过Windows浏览器看到这些脚本,但是不能指出为什么应用程序不能看到这些脚本。考虑到这个问题是和权限相关的,他花费了一些时间来研究这个,所以知道了关于64位版本的Windows保存DLL文件隔离的方法,所以他能够把这些脚本放到/Windows/SysWOW64文件夹。
64
位版本的Windows对于一个管理员来说,了解底层系统结构非常重要。

简单点就是在64位系统下面,请将32DLL文件存放到/Windows/SysWOW64 文件夹中.

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1625
博文 420
码字总数 1483887
作品 0
海淀
技术主管
私信 提问
如何解决msvcr100.dll丢失问题?

msvcr100.dll是Visual Studio 2010的一个动态链接库,如果某程序是用它开发出来的,那么该程序的运行就有可能需要此动态链接库,有些程序直接将其打包到了安装目录,并注册,就不会出现缺失的...

傲娇字符
2015/07/23
0
2
应用程序无法正常启动0xc000007b解决方法

场景 Win32可执行程序在64位操作系统运行的时候,弹出错误解决找不到wpcap.dll,直接在System32文件夹下,拷贝wpcap.dll到系统中,运行出现如下的错误:应用程序无法正常启动0xc000007b 分析...

fengyuzaitu
05/31
0
0
apache 无法启动此程序计算机中丢失vcruntime140.dll

vcruntime140.dll文件下载,解决找不到vcruntime140.dll的问题 vcruntime140.dll控件常规安装方法(仅供参考): 一、如果在运行某软件或编译程序时提示缺少、找不到vcruntime140.dll等类似提...

weixingo
2016/02/18
1K
0
64位进程调用32位dll的解决方法

最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的遇到了64位进程...

伽罗kapple
2016/01/25
203
0
北京千搜科技有限公司/face-java-sdk

Version 4.0 千搜科技第四代人脸识别引擎java接口 目录结构 java 目录存放java SDK的源码 jni 存放java调用C++ SDK的jni源码 JavaApi 新的不需要依赖jni代码的java API 源码 java版本 java v...

北京千搜科技有限公司
2017/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么要学习Python?这10个理由足够了!

摘要: 看完这十个理由,我决定买本python从入门到精通! 如果你定期关注现今的科技发展,那么你可能想知道我为什么要写这篇文章告诉人们学习Python?因为几年前我提倡Java而不是Python。 在...

阿里云官方博客
20分钟前
2
0
spring服务方式配置okhttp3

问题 如果把OKhttp以Spring服务方式配置,就解决了从配置中心运行时刷新配置参数的问题。 OkHttpConfig.java package com.zyl.config;import okhttp3.OkHttpClient;import org.springfra...

亚林瓜子
21分钟前
2
0
8张图让你一步步看清 async/await 和 promise 的执行顺序

**摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有。 为什么写这篇文章? 说实话,关于js的异步执行顺...

Fundebug
21分钟前
1
0
Linux 命令菜单

#!/bin/bash #menu.sh menu(){ source ~/.bashrc echo "=================================" echo "Please enter your choise:" echo "(0) Kill all java" echo "(1) Start all tomcat" echo......

mellen
27分钟前
3
0
原来云数据库也是有思想的...

本文由一刻talks发表 邵宗文,腾讯云数据库专家副总监。十余年数据库从业经验,2009年加入腾讯,曾负责腾讯网,新闻客户端,快报,视频,财经,体育等数据库平台部署、规划及运维支持工作。本...

腾讯云加社区
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部