Gan*_*ved 219 dll system32 syswow64 32bit-64bit
我想知道我们什么时候需要放置一个文件
在64位Windows系统上的C:\ Windows\System32或C:\ Windows\SysWOW64.
我有两个DLL,一个用于32位,一个用于64位.
逻辑上,我以为我将32位DLL放在C:\ Windows\System32下,将64位DLL放在C:\ Windows\SysWOW64下.
令我惊讶的是,这是相反的方式!的32位一个进入C:\的Windows\SYSWOW 64,和64位DLL进入C:\的Windows \系统32.
很混乱的东西.这背后的原因是什么?
Ryt*_*mis 218
我认为目的是重命名System32,但是有很多应用程序为该路径进行了硬编码,因此删除它是不可行的.
SysWoW64不适用于64位系统的dll,它实际上类似于"Windows64上的Windows",这意味着你需要在64位Windows上运行32位应用程序.
这篇文章解释了一下:
"Windows x64有一个包含64位DLL的目录System32(原文如此!).因此,位数为64的本机进程找到他们期望的"他们的"DLL:在System32文件夹中.第二个目录,SysWOW64,包含32 -bit DLL.文件系统重定向器为32位进程隐藏真实的System32目录并以System32的名称显示SysWOW64.
编辑:如果您正在谈论安装程序,您真的不应该硬编码系统文件夹的路径.相反,让Windows根据您的安装程序是否在仿真层上运行来为您处理.
Jon*_*ica 26
我应该补充一点:你不应该把你的dll放到\ system32 \中!修改你的代码,修改你的安装程序......找到一个不在c:\ windows下的位的家
例如,您的安装程序将您的dll放入:
\program files\<your app dir>\
or
\program files\common files\<your app name>\
Run Code Online (Sandbox Code Playgroud)
(注意:实际执行此操作的方法是使用环境var:%ProgramFiles%或%ProgramFiles(x86)%来查找Program Files的位置....您不认为它是c:\ program files\.. ..)
然后设置一个注册表标记:
HKLM\software\<your app name>
-- dllLocation
Run Code Online (Sandbox Code Playgroud)
使用您的dll的代码读取注册表,然后动态链接到该位置的dll.
以上是明智之举.
您永远不会将您的dll或第三方dll安装到\ system32 \或\ syswow64中.如果你必须静态加载,你将你的dll放在你的exe目录(他们将被发现的地方).如果你无法预测exe目录(例如某些其他exe会调用你的dll),你可能必须将你的dll dir放入搜索路径(如果可能的话,请避免这样做!)
system32和syswow64用于Windows提供的文件... 不适用于任何人的elses文件.人们养成放东西的坏习惯的唯一原因是因为它总是在搜索路径中,并且许多应用程序/模块使用静态链接.(所以,如果你真的了解它,真正的罪恶是静态链接 - 这是本机代码和托管代码中的罪 - 总是总是动态链接!)
小智 7
进入相同的问题并研究了几分钟.
我被教导使用Windows 3.1和DOS,记得那些日子?在我使用Macintosh计算机一段时间之后不久,在购买x64位机器后开始摇摆回到Windows.
这些变化背后的实际原因(有些人会说具有历史意义)是程序员继续工作所必需的.
大多数变化如上所述:
Program Files VS Program Files (x86)
最初,16/86bit文件是在'86'英特尔处理器上写的.
System32真的意味着System64(在64位Windows上)
当开发人员第一次开始使用Windows7时,存在一些兼容性问题,其中存储了其他应用程序.
SysWOW64 真正意思 SysWOW32
基本上,用简单的英语,它意味着"在64位机器上的Windows上的Windows".每个文件夹指示DLL所在的应用程序所在的位置.
以下是两个链接,其中包含您需要的所有基本信息:
希望这能搞定!
Windows历史上一直在System32上放置所有32位DLL,而System用于16位DLL。当Microsoft创建64位操作系统时,我认识的每个人都希望文件位于System64下,但是Microsoft认为将64位文件放在System32下更有意义。我能找到的唯一理由是,他们希望32位的所有内容都可以在64位Windows中工作,而无需更改程序中的任何内容-只需重新编译即可。他们解决此问题的方法(以便仍可以运行32位应用程序)是在Windows64上创建一个称为Windows32的32位Windows子系统。这样,为32位子系统的System目录创建了首字母缩写SysWOW64。Sys是System的缩写,而WOW64是Windows32OnWindows64的缩写。
由于Windows 16已经与Windows 32隔离开了,因此不需要与Windows 64等效的Windows 16。在32位子系统中,当程序使用system32目录中的文件时,它们实际上是从SysWOW64目录中获取文件的。但是这个过程是有缺陷的。
这是一个可怕的设计。以我的经验,我不得不对编写64位应用程序进行很多更改,仅更改System32目录以读取System64就是一个很小的更改,并且预编译指令旨在处理该更改。
| 归档时间: |
|
| 查看次数: |
175472 次 |
| 最近记录: |