64位系统上的System32文件夹

时间:2009-12-06 10:50:01

标签: 64-bit cmd

我有一个在32位Vista系统上运行的cmd文件。

我注意到代码引用了system32驱动程序文件夹。

我想知道代码是否可能在64位Windows 7系统上运行。所以我想我的问题是 64位系统是否包含system32文件夹?

非常感谢任何回复。

4 个答案:

答案 0 :(得分:13)

64位Windows中的System32文件夹实际上包含64位文件,在WOW64下运行的32位程序通常会在System32中查找可以调用的32位DLL等 - 但它们会找到64位的。因此,操作系统将所有32位应用程序对System32文件夹的请求重定向到包含32位系统文件的SysWOW64文件夹。

答案 1 :(得分:7)

Windows有一项名为WoW 64(Windows-on-Windows 64位)的技术,它允许32位应用程序(甚至是用C / C ++编写的编译应用程序)在64位Windows上运行。

除了System32文件夹之外,64位Windows安装还有一个SysWow64文件夹,该文件夹具有32位版本的文件,您可以在System32中找到这些文件。

要明确的是,从32位进程运行时,对System32的引用会被重定向(除非进程禁用此重定向,这是可能的)。因此,如果您有一个引用System32的.CMD文件,它实际上将从SysWow64目录中读取。

答案 2 :(得分:1)

System32 是包含重要操作系统文件的文件夹的名称。

早期版本的64位Windows XP仅运行64位应用程序。这是有道理的:

  • 您在16位Windows上运行16位应用程序
  • 您在32位Windows上运行32位应用程序
  • 您在64位Windows上运行64位应用程序

早期版本的64位Windows XP是64位的,只支持运行64位应用程序。

由于所有文件夹名称保持不变,您只需将应用程序重新编译为64位(而不必更改任何其他 - 包括您的意外硬编码路径),并且只会工作。

在64位Windows上模拟32位操作系统

很明显,只有能够在64位Windows上运行64位应用程序才能阻止某些人升级到64位Windows。所以an emulation layer was created to allow you to run 32-bit applications on a 64-bit operating system.

它被称为WOW64:Windows on Windows64

  • 此仿真层模拟x86架构,虚拟化CPU,文件系统,注册表,环境变量,系统信息功能,以及所有这些功能。
  • 如果32位程序试图查看系统,它将看到一个32位系统。
  • 例如,如果程序调用GetSystemInfo函数来查看正在运行的处理器,它将被告知它在32位处理器上运行,具有32位地址空间,在32位的世界中天空和32位树中的32位鸟。
  • 这就是模拟的重点:通过模拟32位执行环境来保持32位程序的快乐。

问题是这些32位应用程序应该在哪里存储所有32位文件,并配置其32位DLL的位置,并加载32位操作系统支持文件?

我们已经知道原生应用程序存储在哪里。

| Native Application  |
|---------------------|
| C:\Windows\System32 |
| C:\Program Files    |
| HKCU\Software       |

这一切都正确无误;如果您只是将您的32位应用程序重新编译为64位:一切正常。所有这些地点仍然是正确的。

64位世界中的32位

但是现在因为我们要向后弯曲以适应非64位应用程序,我们必须找到一些地方让他们拥有旧的32位操作系统文件,并存储他们的32位数据,并拥有32位程序,32位共享组件:

| Native Application  | Emulated 32-bit           |
|---------------------|---------------------------|
| C:\Windows\System32 | C:\Windows\SysWOW64       |
| C:\Program Files    | C:\Program Files (x86)    |
| HKCU\Software       | HKCU\Software\Wow6432Node | 

问题是:

  • 如果64位程序要求C:\Windows\System32,那就更好了获取 64位文件
  • 如果32位程序要求C:\Windows\System32,那就更好了获取 32位文件

这意味着如果某个32位进程询问某些文件位置,Windows必须透明地将调用重定向到32位文件夹和注册表项。

如果32位程序认为它在旧的32位操作系统上运行,要求提供32位位置,则需要给出“真实”位置:< / p>

| Native Application  | Emulated 32-bit asks for  | Is actually given         |
|---------------------|---------------------------|---------------------------|
| C:\Windows\System32 | C:\Windows\System32       | C:\Windows\SysWOW64       |
| C:\Program Files    | C:\Program Files          | C:\Program Files (x86)    |
| HKCU\Software       | HKCU\Software             | HKCU\Software\Wow6432Node | 

如果您不希望32位应用程序受到所有这些仿真和thunking的影响,那么解决方案显而易见:

  • 为64位操作系统创建64位应用程序

停止创建32位应用程序,然后在仿真层使您通过仿真时抱怨。你的申请是行为不端的古怪;解决它。

答案 3 :(得分:0)

Windows 7 64位有一个System32文件夹。

但是,您的文件是否仍会运行是一个更复杂的问题。 可能,完全取决于它所依赖的内容;如果它以错误的方式依赖驱动程序,它将失败,因为32位驱动程序在64位系统上不起作用。